AttributeError: у объекта «TestLogin» нет атрибута «драйвер» - PullRequest
0 голосов
/ 07 июня 2018

Итак, мой вопрос связан с AttributeError: у объекта 'LoginPage' нет атрибута 'driver' , но ответ не решает мою проблему.

Я создаю тестовые случаииспользуя Python и платформу Appium с объектной моделью страницы, и мне нужно выполнить код перед каждым тестовым случаем, поэтому я использую метод 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 расширяет класс 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), но в этом случае мне потребуется self.login_page = LoginPage(self.driver) в каждом будущем методе, который я напишу в классе TestLogin.

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 голосов
/ 10 июня 2018

я нашел для вас другой ответ, вы должны определить 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()

тогда что бы вы ни хотели, не забудьте определить другие синтаксисы

0 голосов
/ 07 июня 2018

что, поскольку вы не определили (драйвер):

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

, то:

TestLogin(Something).__init__()

вы просто забыли определить драйвер, вы должны определить его в классе (TestLogin)не в классе других

...