AttributeError:' TestLogin'对象没有属性' driver'

时间:2018-06-07 15:43:19

标签: python python-2.7 selenium-webdriver appium pageobjects

所以,我的问题与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)方法,但没有得到属性错误?我需要一种更好的方法来处理它。

谢谢。

2 个答案:

答案 0 :(得分:0)

因为你没有定义(驱动程序):

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

然后:

TestLogin(Something).__init__()

你只是忘了定义驱动程序 你必须在类(TestLogin)中定义它而不是在其他类

中定义它

答案 1 :(得分:0)

我为你找到了其他答案,你必须在所有事情之前定义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()

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