gpt4 book ai didi

python - 在 Jenkins 代理上运行测试时如何使用 Selenium 捕获屏幕截图

转载 作者:行者123 更新时间:2023-12-04 16:46:21 26 4
gpt4 key购买 nike

现在我正在使用 pytest 和 selenium 在 Jenkins 上运行测试。当我在本地运行下面的代码时,它会在每次测试后创建一个屏幕截图,效果很好。

@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
pytest_html = item.config.pluginmanager.getplugin('html')
outcome = yield
report = outcome.get_result()
if 'selenium' not in item.fixturenames or 'selenium' not in item.funcargs:
return

driver = item.funcargs['selenium']
extra = getattr(report, 'extra', [])
if report.when == 'call' or report.when == "setup":
extra.append(pytest_html.extras.url(driver.current_url, name = "Go To URL Tested"))
if not report.skipped:
report_directory = os.path.dirname(item.config.option.htmlpath)
file_name = f"{item.originalname}.png"
screenshot_was_saved = driver.get_screenshot_as_file(f"{report_directory}\\{file_name}")
if file_name:
report.screenshot = html.a(html.img(src = file_name, onclick = "window.open(this.src)", align = "right", style = "max-height: 150px;"), href = "#")
report.extra = extra

但是当我在 Jenkins 的构建管道中运行相同的代码时,不会创建图像。从 get_screenshot_as_file 返回的值方法是 False .没有异常返回并且测试通过。 Jenkins 代理有权写入文件,因为我要转储到 HTML 报告的目录已创建。报告的 index.html 也会被创建。除了图像,一切都在那里。

有没有人有这样的经验?我什至尝试在 headless 模式下运行 chrome 驱动程序,但没有任何区别。

任何帮助,将不胜感激。

最佳答案

这对我有用

@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
"""
Extends the PyTest Plugin to take and embed screenshots in html report, whenever test fails.
:param item:
"""
pytest_html = item.config.pluginmanager.getplugin('html')
outcome = yield
report = outcome.get_result()
extra = getattr(report, 'extra', [])

if report.when == 'call':
xfail = hasattr(report, 'wasxfail')
if (report.skipped and xfail) or (report.failed and not xfail):
report_directory = os.path.dirname(item.config.option.htmlpath)
file_name = str(int(round(time.time() * 1000))) + ".png"
# full_path = os.path.join("C:\Screenshots", file_name)
full_path = os.path.join(report_directory, file_name)
if item.funcargs.get('driver'):
print(f"[INFO] screenshot: {full_path}")
item.funcargs['driver'].get_screenshot_as_file(full_path)
if file_name:
html = '<div><img src="%s" alt="screenshot" style="width:304px;height:228px;" ' \
'onclick="window.open(this.src)" align="right"/></div>' % file_name
extra.append(pytest_html.extras.html(html))
report.extra = extra

关于python - 在 Jenkins 代理上运行测试时如何使用 Selenium 捕获屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50977867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com