selenium 如何让PYTEST在运行测试的同时不间断截图?

643ylb08  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(238)

我想让PYTEST在运行测试时以指定的时间间隔截屏。这就像我想要强制Web驱动程序同时执行这两个操作。

from pytest import fixture

@fixture(scope="function")
def drv(app_config):
    options = app_config.browser[0]
    service = app_config.browser[1]
    drv = browser(options=options, service=service)

    yield drv

@fixture(scope="function", autouse=True)
def recorder(drv):
    while True:
        drv.save_screenshot(f"./recordings/{str(time())}.png")

此刻。安装程序会创建一个Web驱动程序,然后停滞不前,无限期地截屏。
我希望Web驱动程序在执行其他操作(如打开浏览器、查找和单击元素等)时截屏,直到驱动程序关闭。

zbdgwd5y

zbdgwd5y1#

Pytest是一个测试框架,没有任何关于浏览器中发生的事情的上下文。您需要在单独的线程和循环中将WebDRIVER对象发送给该方法,直到WebDRIVER不被销毁,或者在您的驱动程序中实现该行为。
有两种方法可以实现这一点:
1.您可以使用Selify WebDriver附带的EventFiringWebDriver。基本上,您可以告诉Selify在导航之前/之后打印一些内容。

from selenium.webdriver.support.events import EventFiringWebDriver, AbstractEventListener

class MyListener(AbstractEventListener):
    def before_navigate_to(self, url, driver):
        print("Before navigate to %s" % url)
    def after_navigate_to(self, url, driver):
        print("After navigate to %s" % url)

driver = Firefox()
ef_driver = EventFiringWebDriver(driver, MyListener())
ef_driver.get("http://www.google.co.in/")

有一些事件的语气可以使用,你可以参考这个来源
1.使用Decorator模式并修饰Web驱动程序,使方法在给定间隔后为您的特定操作截取屏幕截图。

相关问题