Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Опять page object или попытка сделать как нужно

pytest
python
webdriver
Теги: #<Tag:0x00007f7b64ee1358> #<Tag:0x00007f7b64ee11c8> #<Tag:0x00007f7b64ee1038>

(Goshko Nazar) #1

В общем буду краток:

conftest.py

@pytest.fixture(scope="session")
def app(request, browser_type, base_url):
    if browser_type == "firefox":
        driver = webdriver.Firefox()
    elif browser_type == "chrome":
        driver = webdriver.Chrome()
    elif browser_type == "ie":
        driver = webdriver.Ie()
    def fin():
        driver.close()
    request.addfinalizer(fin)
    return Application(driver, base_url)

Абстрактная страница:

class Page(object):

    def __init__(self, base_url, driver):
        self.driver = driver
        self.base_url = base_url
  
здесь еще общие для всех страниц методы, опустим их

Создаем реальную, на основе Page:

class Home_Page(Page):

    @property
        def button_Google(self):
             return self.driver.find_element_by_xpath('//*[@id="container"]/div[1]/div[1]/div[2]/a[1]')

Создаем метод, для рабочего апликеййшена (метод работы с функциональностью):

class Application(object):

    def __init__(self, driver, base_url):
        driver.get(base_url)
        self.driver = driver
        self.home_page = Home_Page(driver, base_url)

    def check_FT(self):
        self.home_page.button_Google.click()
        return self.driver.page_source

Смыкаем нужный метод непосредственно в тестах:

def test_button_rss(app):
    res = app.check_FT()
    assert 'http://backend.userland.com/blogChannelModule' in res

Получаем ошибку типов:

self = <pages.HomePage.Home_Page object at 0x034A4890>

    @property
        def button_Google(self):
>       return self.driver.find_element_by_xpath(self.__button_locator['Google+'])

E   AttributeError: 'str' object has no attribute 'find_element_by_xpath'

Ну, я думаю сам по себе вопрос понятен - как это self.driver вдруг стал объектом типа “str”


(Александр Таранков) #2

потому что аргументы передаются не в том порядке: передаются driver, base_url, а Page ожидает base_url, driver


(Goshko Nazar) #3

да, действительно)) Вчера ночью уже нашел ошибку, но Вам спасибо, плюсик в карму)