简体   繁体   English

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

[英]AttributeError: 'TestLogin' object has no attribute 'driver'

So, my question is related to AttributeError: 'LoginPage' object has no attribute 'driver' , but answer doesn't solve my issue. 所以,我的问题与AttributeError有关:'LoginPage'对象没有属性'driver' ,但是答案不能解决我的问题。

I'm creating test cases using Python and Appium framework with page object model and I need some code to be executed before every test case, so I use setUp method for this in base_test.py file. 我正在使用带有页面对象模型的Python和Appium框架创建测试用例,并且在每个测试用例之前都需要执行一些代码,因此我在base_test.py文件中为此使用了setUp方法。

base_test.py 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 class extends BaseTest class. TestLogin类扩展了BaseTest类。

test_login.py 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 class needs driver object because all actions happen in page classes. LoginPage类需要driver对象,因为所有操作都在页面类中发生。

If I execute this script I get an error AttributeError: 'TestLogin' object has no attribute 'driver' . 如果执行此脚本,则会收到错误AttributeError: 'TestLogin' object has no attribute 'driver'

Now, if I change my TestLogin class to: 现在,如果我将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()

I won't receive an error but setUp method will be executed 2 times, first on setup.setUp() and then in test_00_login(self) method. 我不会收到错误,但是setUp方法将执行两次,首先在setup.setUp()上执行,然后在test_00_login(self)方法中执行。 This is not what I want. 这不是我想要的。

Third way would be to move self.login_page = LoginPage(self.driver) to the method test_00_login(self) , but this way I would need to have self.login_page = LoginPage(self.driver) in every future method I write in TestLogin class. 第三种方法是将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()

Is there a way of having self.login_page = LoginPage(self.driver) on top level of TestLogin class, like in __init__(self) method, but without getting attribute error? 是否有一种方法可以像在__init__(self)方法中那样,在TestLogin类的顶级上具有self.login_page = LoginPage(self.driver) ,但不会出现属性错误? I need a better way of handling it. 我需要一种更好的处理方式。

Thank you. 谢谢。

that because you didn't defined (driver): 那是因为您没有定义(驱动程序):

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

then: 然后:

TestLogin(Something).__init__()

you just forgot to define driver you must define it in the class (TestLogin) not in others class 您只是忘了定义驱动程序,必须在类(TestLogin)中定义它,而不是在其他类中

i found other answer for you , you must define self.driver before everything: 我为您找到了其他答案,您必须在一切之前定义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()

then what ever you want , don't forget to define other syntaxs 然后,无论您想要什么,别忘了定义其他语法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 AttributeError:'LoginPage'对象没有属性'driver' - AttributeError: 'LoginPage' object has no attribute 'driver' AttributeError: 'WebDriver' object 没有属性 'driver' - AttributeError: 'WebDriver' object has no attribute 'driver' AttributeError:“驱动程序”对象没有属性“ id” - AttributeError: 'Driver' object has no attribute 'id' AttributeError: 'TestTomsLogin' object 没有属性 'driver' - AttributeError: 'TestTomsLogin' object has no attribute 'driver' AttributeError:“WebElement”object 没有属性“驱动程序” - AttributeError: 'WebElement' object has no attribute 'driver' AttributeError:“ Dlink”对象没有属性“ browser_driver” - AttributeError: 'Dlink' object has no attribute 'browser_driver' 抛出错误:AttributeError:'KenLogin'对象没有属性'driver' - Throwing error : AttributeError: 'KenLogin' object has no attribute 'driver' 安装 Chrome 驱动程序,AttributeError: 'Service' object has no attribute 'process' - install Chrome driver, AttributeError: 'Service' object has no attribute 'process' AttributeError: 'AttributeError' object 没有属性 'To' - AttributeError: 'AttributeError' object has no attribute 'To' AttributeError: 'list' object 没有属性 'find_element' - Selenium 驱动程序 - AttributeError: 'list' object has no attribute 'find_element' - Selenium driver
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM