Merge pull request #6296 from emilghittasv/playwright-block-pontoon-requests

Playwright block Pontoon requests
This commit is contained in:
Emil Ghitta 2024-10-17 12:29:39 +03:00 коммит произвёл GitHub
Родитель 1750ec6bce 8099cfcb1f
Коммит b494d09f0e
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
3 изменённых файлов: 36 добавлений и 8 удалений

Просмотреть файл

@ -196,7 +196,7 @@ class MyProfileEdit(BasePage):
self._click(self.__cancel_button) self._click(self.__cancel_button)
def click_update_my_profile_button(self): def click_update_my_profile_button(self):
self._click(self.__update_my_profile_button) self._click(self.__update_my_profile_button, with_force=True)
def click_close_account_option(self): def click_close_account_option(self):
self._click(self.__close_account_and_delete_all_profile_information_link) self._click(self.__close_account_and_delete_all_profile_information_link)

Просмотреть файл

@ -2,32 +2,60 @@ import allure
import pytest import pytest
from playwright.sync_api import Page from playwright.sync_api import Page
from slugify import slugify from slugify import slugify
from playwright_tests.messages.homepage_messages import HomepageMessages from playwright_tests.messages.homepage_messages import HomepageMessages
def _block_request(route):
"""
This function blocks a certain request
"""
route.abort()
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def navigate_to_homepage(page: Page): def navigate_to_homepage(page: Page):
""" """
This fixture is used in all functions. It navigates to the SuMo homepage and returns the page This fixture is used in all functions. It navigates to the SuMo homepage and returns the page
object. object.
""" """
# Set default navigation timeout to 2 minutes.
page.set_default_navigation_timeout(120000) page.set_default_navigation_timeout(120000)
# Block pontoon requests in the current page context.
page.route("**/pontoon.mozilla.org/**", _block_request)
# Navigate to the SUMO stage homepage.
page.goto(HomepageMessages.STAGE_HOMEPAGE_URL) page.goto(HomepageMessages.STAGE_HOMEPAGE_URL)
return page return page
def pytest_runtest_makereport(item, call) -> None: def pytest_runtest_makereport(item, call) -> None:
""" """
If there is a test failure we are saving & attaching the test execution's screencast to This pytest hook is triggered after each test execution.
allure reporting. If a test failure occurred we are saving & attaching the test execution screencast to the
allure report for better debugging.
""" """
if call.when == "call": if call.when == "call":
# Check if the test has raised an exception (test failed or encountered an error during
# execution). Also checks if the test function has the page instance in its arguments
# ensuring that video recording is applied only when the test involves playwright
# automation.
if call.excinfo is not None and "page" in item.funcargs: if call.excinfo is not None and "page" in item.funcargs:
# Retrieve the page object from the test function arguments.
page: Page = item.funcargs["page"] page: Page = item.funcargs["page"]
# Provide the path to the recorded video (the video recording starts when the browser
# context is created).
video_path = page.video.path() video_path = page.video.path()
page.context.close() # ensure video saved # Ensure that the browser context is closed after test. Closing the context also
# ensures that the video is properly saved.
page.context.close()
# Attaching the video to the Allure report:
# 1. Opening the video file in binary mode and reading its content.
# 2. Assigning a name to the video attachment based on the slugyfied version of the
# test node id.
# 3. Saving the video as a .webm extension.
allure.attach( allure.attach(
open(video_path, 'rb').read(), open(video_path, 'rb').read(),
name=f"{slugify(item.nodeid)}.webm", name=f"{slugify(item.nodeid)}.webm",

Просмотреть файл

@ -185,8 +185,8 @@ def test_my_question_page_reflects_posted_questions_and_redirects_to_the_correct
with allure.step("Navigating to my questions profile page and verifying that the first " with allure.step("Navigating to my questions profile page and verifying that the first "
"element from the My Questions page is the recently posted question"): "element from the My Questions page is the recently posted question"):
sumo_pages.top_navbar.click_on_my_questions_profile_option() sumo_pages.top_navbar.click_on_my_questions_profile_option()
assert sumo_pages.my_questions_page._get_text_of_first_listed_question().replace( assert sumo_pages.my_questions_page._get_text_of_first_listed_question(
" ", "") == question_info["aaq_subject"].replace(" ", "") ).strip() == question_info["aaq_subject"].strip()
with allure.step("Clicking on the first list item and verifying that the user is " with allure.step("Clicking on the first list item and verifying that the user is "
"redirected to the correct question"): "redirected to the correct question"):