В общем буду краток:
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”