Jay*_*ers 7 python selenium pytest
我有一套硒端到端测试。我实例化一个webdriver.ChromeDriver实例,并将其作为套件中每个测试的固定装置传递。
'''python3
@pytest.fixture(scope="session")
def driver(request):
return d(request)
'''
Run Code Online (Sandbox Code Playgroud)
最后一次测试运行后,我想用 关闭 webdriver 实例driver.quit()。
我可以用一个固定装置来完成这个
@pytest.hookimpl(trylast=True)
def close_after_test_suite(driver, requests):
if requests:
driver.quit()
Run Code Online (Sandbox Code Playgroud)
然而,只有当测试在套件期间没有失败时才会运行。如果每个测试都通过,浏览器将关闭。如果单个测试失败,则浏览器将保持打开状态。
无论测试是否失败,如何使用 pytest 在测试套件结束时关闭浏览器?
如果您想在拆卸时运行一些代码,请使用yield代替return,例如:
@pytest.fixture(scope="session")
def driver(request):
driver = d(request)
yield driver
driver.quit()
Run Code Online (Sandbox Code Playgroud)
但是,这些selenium.webdriver.WebDriver类实现了上下文管理器魔术方法,因此您也可以使用以下with语句:
@pytest.fixture(scope="session")
def driver(request):
with d(request) as driver:
yield driver
Run Code Online (Sandbox Code Playgroud)
另一个(虽然很旧,但仍然有效)选项是使用以下request.addfinalizer选项:
@pytest.fixture(scope="session")
def driver(request):
driver = d(request)
def f():
driver.quit()
request.addfinalizer(f)
return driver
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1540 次 |
| 最近记录: |