我有一套硒端对端测试。我实例化了一个webdriver.ChromeDriver
实例,作为夹具传递给套件中的每个测试。
'''python3
@pytest.fixture(scope="session")
def driver(request):
return d(request)
'''
最后一次测试运行后,我想用driver.quit()
关闭webdriver实例。
我可以用固定装置完成
@pytest.hookimpl(trylast=True)
def close_after_test_suite(driver, requests):
if requests:
driver.quit()
但是,这仅在套件期间测试未失败的情况下才能运行。如果所有测试通过,浏览器将关闭。如果单个测试失败,则浏览器将保持打开状态。
无论测试是否失败,如何使用pytest在测试套件结束时关闭浏览器?
答案 0 :(得分:1)
如果要在拆卸时运行某些代码,请使用yield
而不是return
,例如:
@pytest.fixture(scope="session")
def driver(request):
driver = d(request)
yield driver
driver.quit()
但是,selenium.webdriver.WebDriver
类实现了上下文管理器魔术方法,因此您也可以使用with
语句:
@pytest.fixture(scope="session")
def driver(request):
with d(request) as driver:
yield driver
另一个(虽然很旧,但仍在工作)选项正在使用request.addfinalizer
选项:
@pytest.fixture(scope="session")
def driver(request):
driver = d(request)
def f():
driver.quit()
request.addfinalizer(f)
return driver