1

我是 pytest 的新手,可能我对参数化的理解不如我想的那么好。我的目标是在运行测试时传递浏览器名称来告诉 pytest 我要使用哪个 webdriver。

这是我的代码:

conftest.py

def pytest_addoption(parser):
    parser.addoption("--browser", action="store", default="chrome")

网络驱动程序.py

@pytest.fixture(params=["chrome", "firefox", "safari"])
def whichDriver(request):
    browser_list = request.config.getoption("--browser")
    driver_map = {
        "chrome": webdriver.Chrome(),
        "firefox": webdriver.Firefox(),
        "safari": webdriver.Safari()
    }
    if request.param in browser_list:
        driver = driver_map[request.param]
        return driver
    else:
        pytest.skip("Not running tests")

class Driver:

    def __init__(self):
        self.instance = whichDriver

    def navigate(self, url):
        if isinstance(url, str):
            self.instance.get(url)
        else:
            raise TypeError("URL should be a string.")


test_login.py

class TestLogin(unittest.TestCase):

    def setUp(self):
        self.driver = Driver()
        self.driver.navigate(constants.login_url)

    def test_login(self):
        login_screen = LoginScreen(self.driver)
        login_screen.log_in(user_name=constants.my_login, user_password=constants.my_password)

    def tearDown(self):
        self.driver.instance.quit()


当我运行时:

pytest --browser=firefox TC/test_login.py 

我得到:

 AttributeError: 'function' object has no attribute 'get'
4

0 回答 0