根据命令行参数

时间:2015-05-10 05:10:00

标签: python selenium pytest

我正在使用Python进行一些硒测试,并且我试图设置我的conftest.py以生成一个新的webdriver夹具,该夹具在整个会话期间持续存在,用于每个所需的功能。所需功能对象的列表通过YAML文件指定,该路径在命令行指定。

这是我conftest.py的超级缩小版,以说明我到目前为止所拥有的内容:

def pytest_addoption(parser):
    parser.addoption("-C", "--capabilities", action="store", default="capabilities.yaml")

def pytest_generate_tests(metafunc):
    if 'desired_capabilities' in metafunc.fixturenames:
        capabilities_file = metafunc.config.option.capabilities
        metafunc.parametrize('desired_capabilities', yaml.load(capabilities_file))

@pytest.fixture(scope="session")
def webdriver(desired_capabilities):
    # desired_capabilities should take on the different values of the list in the YAML file
    driver = util.create_webdriver(desired_capabilities)

但是使用这段代码,我得到了大量ScopeMismatchError个。例如,ScopeMismatchError: You tried to access the 'function' scoped fixture 'desired_capabilities' with a 'session' scoped request object, involved factories (... omitted)

我如何实现这类目标?

1 个答案:

答案 0 :(得分:1)

我想我已经弄明白了。问题是我需要将scope="session"添加到parametrize调用的关键字参数中。