Мне нужна помощь с моим кодом pytest / selenium.
У меня есть следующий код в моем файле conftest.py .
import pytest
from base.webdriverfactory import WebDriverFactory
from pages.login_page import LoginPage
@pytest.fixture(scope="class")
def oneTimesetUp(request, browser):
print("Running one time setUp")
wdf = WebDriverFactory(browser)
driver = wdf.getWebDriverInstance()
lp = LoginPage(driver)
lp.login("haykpo", "Aaaa4321")
if request.cls is not None:
request.cls.driver = driver
yield driver
lp.log_out_from_wp_page()
driver.quit()
print("Running one time tearDown")
А вот мойтестовый файл, в котором я использую это приспособление
@pytest.mark.usefixtures("oneTimesetUp", "tearDown")
class TestPublishWithOfflinewAsset:
@pytest.fixture(autouse=True)
def objectSetup(self, oneTimesetUp):
self.pub = TestPublishofflineWOMedia(self.driver)
def test_publish_with_off_w_media(self):
self.pub.select_project('Test cases - Avallain')
self.pub.check_lo_plays_normally(15292)
Я знаю, что все, что идет после yield, должно быть кодом tearDown. Итак, я написал эти 2 строки, чтобы выйти из приложения и выйти из браузера в конце выполнения теста.
lp.log_out_from_wp_page()
driver.quit()
Однако проблема заключается в том, что часть выхода из системы (что интересно, не выходная) всегда выполняется после нескольких шагов, когда начинается мой тест и когда фокус браузера переключается на iframe во время выполнения теста (или можетбудь это просто совпадение, я не уверен, виновен ли здесь iframe). Как я могу составить свой код, чтобы запустить мой журнал разборки или что я хочу после yield, как предполагалось, но не во время выполнения теста?
Для более подробной информации вот подробные файлы с кодом. Ниже приведена моя страница входа в систему
from base.basepage import BasePage
class LoginPage(BasePage):
def __init__(self, driver):
super().__init__(driver)
self.driver = driver
### Locators ###
_name_field = "form1:Name"
_password_field = "form1:Password"
_login_button = "form1:loginButton"
_work_packages = "wpButton"
_user_logout_dropdown_button = 'rolebutton_button'
_logout_button = 'blogout'
def log_out_from_wp_page(self):
self.elementClick(locator=self._user_logout_dropdown_button)
self.driver.implicitly_wait(5)
self.elementClick(locator=self._logout_button)
А ниже - фабрика веб-драйверов
class WebDriverFactory:
def __init__(self, browser):
self.browser = browser
def getWebDriverInstance(self):
"""
Get WebDriver Instance based on the browser configuration
Returns:
'WebDriver Instance'
"""
global driver
baseURL = "https://example.com"
if self.browser == "iexplorer":
# Set ie driver
driver = webdriver.Ie()
elif self.browser == "firefox":
driver = webdriver.Firefox()
elif self.browser == "chrome":
# Set chrome driver
driver = webdriver.Chrome()
#driver.set_window_size(1440, 900)
else:
driver = webdriver.Chrome()
# Setting Driver Implicit Time out for An Element
driver.implicitly_wait(10)
# Maximize the windows
driver.maximize_window()
# Loading browser with App URL
driver.get(baseURL)
return driver
Ниже приведена BasePsge
class BasePage(SeleniumDriver):
def __init__(self, driver):
super(BasePage, self).__init__(driver)
self.driver = driver