У меня есть пример проекта в PyCharm - состоит из простого теста, который проверяет вход в заданное правильное рабочее пространство Slack.Он имеет каталог web_drivers
с chromedriver
внутри, conftest.py
с настройкой веб-драйвера для теста и tests.py
с реальным тестом, например
conftest.py
import os
import pytest
from selenium import webdriver
@pytest.fixture(scope='class')
def driver_get(request):
web_driver = webdriver.Chrome(executable_path=os.path.join("web_drivers","chromedriver.exe"))
yield web_driver
def fin():
web_driver.close()
request.addfinalizer(fin)
tests.py
import pytest
class TestSlackWorkspace(object):
@pytest.fixture(autouse=True)
def setup(self, driver_get):
self.driver = driver_get
self.driver.get("https://slack.com/signin")
self.input_field = self.driver.find_element_by_xpath(
"//input[@type='text' and @id='domain']")
self.continue_button = self.driver.find_element_by_xpath(
"//button[@id='submit_team_domain']")
def test_correct_workspace(self):
self.input_field.send_keys("test")
self.continue_button.click()
assert self.driver.find_element_by_xpath("//h1[@id='signin_header']"
).is_displayed(), "Login page should be displayed"
Теперь вопрос состоит в том, чтобы разделить тест на часть инициализации страницы - def setup
, а фактическую часть выполнения теста - def test_correct_workspace
на другуюклассы и файлы (что-то вроде шаблона объекта страницы)
Таким образом, база conftest.py
должна быть одинаковой и делить test.py
на ie
page.py
class SlackWorkspace(object):
@pytest.fixture(autouse=True)
def __init__(self, driver_get):
self.driver = driver_get
self.driver.get("https://slack.com/signin")
self.input_field = self.driver.find_element_by_xpath("//input[@type='text' and @id='domain']")
self.continue_button = self.driver.find_element_by_xpath("//button[@id='submit_team_domain']")
test.py
class TestWorkspace(object):
def test_correct_workspace(self):
self.input_field.send_keys("test")
self.continue_button.click()
login_page = self.driver.find_element_by_xpath("//h1[@id='signin_header']")
assert login_page.is_displayed(), "Login page should be displayed"
Но наверняка это не сработает в этой форме:
1) Почему-то driver_get
следуетимпортировать в файл инициализации страницы и перенаправлять в __init__
-?
2) Каким-то образом инициализация страницы должна быть связана с реализацией теста в других файлах -?
Не знаете, как организовать все этиимпорт между отдельными файлами