Python 属性错误:';TestLogin';对象没有属性';驱动程序&x27;
所以,我的问题是关于,但答案并不能解决我的问题 我正在使用Python和Appium框架以及页面对象模型创建测试用例,我需要在每个测试用例之前执行一些代码,所以我在base_test.py文件中使用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
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中的链接暗示了正确的解决方案,但我自己仍在研究这个问题。