Python 属性错误:';TestLogin';对象没有属性';驱动程序&x27;

Python 属性错误:';TestLogin';对象没有属性';驱动程序&x27;,python,python-2.7,selenium-webdriver,appium,pageobjects,Python,Python 2.7,Selenium Webdriver,Appium,Pageobjects,所以,我的问题是关于,但答案并不能解决我的问题 我正在使用Python和Appium框架以及页面对象模型创建测试用例,我需要在每个测试用例之前执行一些代码,所以我在base_test.py文件中使用setUp方法来实现这一点 base_test.py class BaseTest(object): def setUp(self): self.driver = webdriver.Remote(server_url,device_config) self.o

所以,我的问题是关于,但答案并不能解决我的问题

我正在使用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()
class TestLogin(BaseTest):
    def __init__(self):
        self.login_page = LoginPage(self.driver)

    def test_00_login(self):
        self.login_page.openLoginPage()
TestLogin类扩展了BaseTest类

test\u login.py

class BaseTest(object):
    def setUp(self):
        self.driver = webdriver.Remote(server_url,device_config)
        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()
LoginPage类需要
驱动程序
对象,因为所有操作都发生在页面类中

如果执行此脚本,则会出现一个错误
AttributeError:“TestLogin”对象没有属性“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\u 00\u login(self)
方法中执行。这不是我想要的

第三种方法是将
self.login\u page=LoginPage(self.driver)
移动到方法
test\u 00\u login(self)
,但这样我就需要在我在TestLogin类中编写的每个未来方法中使用
self.login\u page=LoginPage(self.driver)

class TestLogin(BaseTest):
    def test_00_login(self):
        self.login_page = LoginPage(self.driver)
        self.login_page.openLoginPage()
有没有一种方法可以让TestLogin类的顶层有
self.login\u page=LoginPage(self.driver)
,就像
\uuuuuu init\uuuuu(self)
方法一样,但不会得到属性错误?我需要一个更好的处理方法


谢谢。

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

然后,不管你想做什么,别忘了定义其他语法

我想你可以用init方法初始化驱动程序,然后初始化超类;但很难给出答案,因为你没有提供答案。如果你能提供一些可复制的东西,我很乐意帮助你。安装方法意味着这是一个unitTest测试转换,安装步骤应该在任何子类中自动运行。我相信这个问题还没有解决,因为我自己也遇到了同样的问题。我认为OP中的链接暗示了正确的解决方案,但我自己仍在研究这个问题。