pytest-html と selenium を使用して自己完結型の html レポートを生成しようとしています。レポートにスクリーンショットを埋め込もうとしましたが、表示されません。
私の conftest.py は次のようになります
@pytest.fixture()
def chrome_driver_init(request, path_to_chrome):
driver = webdriver.Chrome(options=opts, executable_path=path_to_chrome)
request.cls.driver = driver
page_object_init(request, driver)
driver.get(URL)
driver.maximize_window()
yield driver
driver.quit()
# Hook that takes a screenshot of the web browser for failed tests and adds it to the HTML report
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item):
pytest_html = item.config.pluginmanager.getplugin("html")
outcome = yield
report = outcome.get_result()
extra = getattr(report, "extra", [])
if report.when == "call":
feature_request = item.funcargs['request']
driver = feature_request.getfixturevalue('chrome_driver_init')
nodeid = item.nodeid
xfail = hasattr(report, "wasxfail")
if (report.skipped and xfail) or (report.failed and not xfail):
file_name = f'{nodeid}_{datetime.today().strftime("%Y-%m-%d_%H_%M")}.png'.replace("/", "_").replace("::", "_").replace(".py", "")
driver.save_screenshot("./reports/screenshots/"+file_name)
extra.append(pytest_html.extras.image("/screenshots/"+file_name))
report.extra = extra
問題はイメージへのパスにあると確信しており、非常に多くの str の組み合わせ、os.path と pathlib を試しましたが、何も機能しませんでした。スクリーンショットは予想される場所に保存されており、他の画像と同じように開くことができます。レポートに表示されないだけです。
<div class="image"><img src="data:image/png;base64,screenshots\scr_tests_test_example_TestExample_test_fail_example_2022-01-18_16_26.png"/></div>
編集:追加の説明のために。で絶対パスを使用しようとしましたが、HTML ファイルでエラーが発生しextra.append
続けました。Cant Resolve File
私の絶対パスは(いくつかの個人的な詳細は編集されC:\Users\c.Me\OneDrive - Me\Documents\GitHub\project\build\reports\screenshots\filename.png
ています)「/」と「\」の両方で試しました
また、私のファイル構造
project
├───build
│ ├───reports
│ ├───screenshots
│ ├───filename.png
| ├───report.html
| ├───run.py # I am running the test suite from here
├───scr
| ├───settings.py
│ ├───tests
│ ├───confest.py
run.py
if __name__ == "__main__":
os.system(f"pytest --no-header -v ../scr/tests/ --html=./reports/Test_Report_{today}.html --self-contained-html")
預言者にとって、今日は私を祝福してくれるかもしれませんCannot Resolve Directory
エラーを取得するには、私のコードは次のとおりです
file_name = f'{nodeid}_{datetime.today().strftime("%Y-%m-%d_%H_%M")}.png'.replace("/", "_").replace("::", "_").replace(".py", "")
img_path = os.path.join(REPORT_PATH, 'screenshots', file_name)
driver.save_screenshot(img_path)
extra.append(pytest_html.extras.image(img_path))
変数REPORT_PATH
は settings.py (上記のディレクトリ ツリーを参照) からインポートされ、によって作成されます。
PROJ_PATH = Path(__file__).parent.parent
REPORT_PATH = PROJ_PATH.joinpath("build\reports")
img_path.replace("\\", "/")
エラーの変更を行うと、楽しい事実もCannot Resolve File