[英]Choose file name depend on parameter in command line running pytest
I have a project with structure the same as this: https://github.com/RomanBaggins/Test_automatisation_final_project .我有一个与此结构相同的项目: https : //github.com/RomanBaggins/Test_automatisation_final_project 。 In conftest.py i get parameters from cmd.在 conftest.py 中,我从 cmd 获取参数。 In one of the functions in mane_page.py I need to assign a value(= parameter in cmd) to a variable.在 mane_page.py 中的一个函数中,我需要为变量分配一个值(= cmd 中的参数)。 For example:例如:
cmd: pytest -s -v --language=en --status=empty test_main_page.py cmd: pytest -s -v --language=en --status=empty test_main_page.py
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def pytest_addoption(parser):
parser.addoption('--language', action='store', default=None, help="Choose language")
parser.addoption('--status', action='store', default=None, help="Choose status")
@pytest.fixture(scope="function")
def browser(request):
user_language = request.config.getoption("language")
if user_language:
options = Options()
options.add_experimental_option('prefs', {'intl.accept_languages': user_language})
browser = webdriver.Chrome(options=options)
browser.implicitly_wait(5)
yield browser
else:
raise pytest.UsageError("--choose your language again")
browser.quit()
@pytest.fixture
def choose_status(request):
return request.config.getoption("status")
Then in main_page.py I want to do this:然后在 main_page.py 我想这样做:
from .base_page import BasePage
from selenium.webdriver.common.by import By
from .locators import MainPageLocators
class MainPage(BasePage):
def go_to_login_page(self):
login_link = self.browser.find_element(By.CSS_SELECTOR, "#login_link")
login_link.click()
**chosen status = status** <-----------
def should_be_login_link(self):
assert self.is_element_present(*MainPageLocators.LOGIN_LINK)
Finally I need this result: chosen_satus = "empty"最后我需要这个结果: selected_satus = "empty"
How can I do it?我该怎么做?
You can send it as a parameter to go_to_login_page()
from the test您可以将其作为参数发送到测试中的go_to_login_page()
@pytest.fixture
def choose_status(request):
return request.config.getoption("status")
def test_main_page(choose_status):
MainPage().go_to_login_page(choose_status)
class MainPage(BasePage):
def go_to_login_page(self, status):
# status = empty
Here is the final code, that solve my problem: conftest.py这是解决我的问题的最终代码:conftest.py
@pytest.fixture
def choose_status(request):
return request.config.getoption("status")
def test_main_page(choose_status):
MainPage().go_to_login_page(choose_status)
In main_page.py在 main_page.py
class MainPage(BasePage):
def go_to_login_page(self,choose_status):
if choose_status == "clear":
#do smth
In test_main_page:在 test_main_page 中:
def test_guest_can_go_to_login_page(browser,choose_status):
link = "someurl"
page = MainPage(browser, link)
page.open()
page.go_to_login_page(choose_status)
page.should_be_login_link()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.