首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >AttributeError:“”TestLogin“”对象没有属性“”driver“”

AttributeError:“”TestLogin“”对象没有属性“”driver“”
EN

Stack Overflow用户
提问于 2018-06-07 23:43:19
回答 1查看 2.6K关注 0票数 0

所以,我的问题与AttributeError: 'LoginPage' object has no attribute 'driver'有关,但答案并不能解决我的问题。

我正在使用Python和Appium框架创建带有页面对象模型的测试用例,并且我需要在每个测试用例之前执行一些代码,因此我在base_test.py文件中使用了setUp方法。

base_test.py

class BaseTest(object):
    def setUp(self):
        self.driver = webdriver.Remote(server_url,device_config)
        self.os = str(self.driver.caps['platformName']).lower()

TestLogin类扩展了BaseTest类。

test_login.py

class TestLogin(BaseTest):
    def __init__(self):
        self.login_page = LoginPage(self.driver)

    def test_00_login(self):
        self.login_page.openLoginPage()

LoginPage类需要driver对象,因为所有操作都发生在页面类中。

如果我执行这个脚本,我会得到一个错误AttributeError: 'TestLogin' object has no attribute 'driver'

现在,如果我将TestLogin类更改为:

class TestLogin(BaseTest):
    def __init__(self):
        setup = BaseTest()
        setup.setUp()
        self.login_page = LoginPage(setup.driver)

    def test_00_login(self):
        self.login_page.openLoginPage()

我不会收到错误,但setUp方法将被执行2次,第一次是在setup.setUp()上,然后是在test_00_login(self)方法中。这不是我想要的。

第三种方法是将self.login_page = LoginPage(self.driver)移到test_00_login(self)方法中,但这样我就需要在将来用TestLogin类编写的每个方法中都有self.login_page = LoginPage(self.driver)

class TestLogin(BaseTest):
    def test_00_login(self):
        self.login_page = LoginPage(self.driver)
        self.login_page.openLoginPage()

有没有一种方法可以让self.login_page = LoginPage(self.driver)位于TestLogin类的顶层,就像在__init__(self)方法中一样,而不会出现属性错误?我需要一个更好的处理方式。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-06-11 00:22:21

我为你找到了另一个答案,你必须在所有事情之前定义self.driver:

from webdriver import Remote
import webdriver 

self = webdriver
driver  = Remote(server_url,device_config)

class BaseTest(object):
def setUp(self):
    self.os = str(self.driver.caps['platformName']).lower()

class TestLogin(BaseTest):
    def __init__(self):
        self.login_page = LoginPage(self.driver)

    def test_00_login(self):
        self.login_page.openLoginPage()

    class TestLogin(BaseTest):
       def test_00_login(self):
         self.login_page = LoginPage(self.driver)
         self.login_page.openLoginPage()

然后,无论您想要什么,不要忘记定义其他语法

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50745330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档