简体   繁体   English

选择文件名取决于运行pytest的命令行中的参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM