зеркало из https://github.com/mozilla/bedrock.git
Remove Pocket mode functional tests
This commit is contained in:
Родитель
84357af614
Коммит
434bb4a29f
|
@ -61,7 +61,6 @@ docker run \
|
|||
-e "PLATFORM=${PLATFORM:-}" \
|
||||
-e "MARK_EXPRESSION=${MARK_EXPRESSION:-}" \
|
||||
-e "BASE_URL=${BASE_URL:-}" \
|
||||
-e "BASE_POCKET_URL=${BASE_POCKET_URL:-}" \
|
||||
-e "PYTEST_PROCESSES=${PYTEST_PROCESSES:=4}" \
|
||||
-e "BOUNCER_URL=${BOUNCER_URL:=https://download.mozilla.org/}" \
|
||||
-e "SCREEN_WIDTH=1600" \
|
||||
|
|
|
@ -304,7 +304,7 @@ to pull in external data such as event/blog feeds etc. These are required for
|
|||
some of the tests to pass.
|
||||
|
||||
To run the full Selenium integration test suite against your local bedrock
|
||||
instance in Mozorg mode:
|
||||
instance:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
|
@ -314,25 +314,11 @@ This will run all test suites found in the ``tests/functional`` directory and
|
|||
assumes you have bedrock running at ``localhost`` on port ``8000``. Results will
|
||||
be reported in ``tests/functional/results.html``.
|
||||
|
||||
To run the full Selenium test suite against your local bedrock instance in
|
||||
Pocket mode, things are slightly different, because of the way things are set
|
||||
up in order to allow CI to test both Mozorg Mode and Pocket Mode at the same
|
||||
time. You need to define a temporary environment variable (needed by the
|
||||
`pocket_base_url` fixture) and scope pytest to only run Pocket tests:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ BASE_POCKET_URL=http://localhost:8000 pytest -m pocket_mode --driver Firefox --html tests/functional/results.html tests/functional/
|
||||
|
||||
This will run all test suites found in the ``tests/functional`` directory that have
|
||||
the pytest "`mark`" of `pocket_mode` and assumes you have bedrock running *in Pocket mode* at
|
||||
``localhost`` on port ``8000``. Results will be reported in ``tests/functional/results.html``.
|
||||
|
||||
.. Note::
|
||||
|
||||
If you omit the ``--base-url`` command line option in Mozorg mode (ie, not
|
||||
in Pocket mode) then a local instance of bedrock will be started, however
|
||||
the tests are not currently able to run against bedrock in this way.
|
||||
If you omit the ``--base-url`` command line option then a local instance
|
||||
of bedrock will be started, however the tests are not currently able to
|
||||
run against bedrock in this way.
|
||||
|
||||
By default, tests will run one at a time. This is the safest way to ensure
|
||||
predictable results, due to
|
||||
|
|
|
@ -16,7 +16,6 @@ markers =
|
|||
skip_if_internet_explorer
|
||||
skip_if_not_firefox
|
||||
smoke
|
||||
pocket_mode
|
||||
|
||||
|
||||
[tool:paul-mclendahand]
|
||||
|
|
|
@ -4,17 +4,7 @@
|
|||
|
||||
import pytest
|
||||
|
||||
from bedrock.base.config_manager import config
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def base_url(base_url, request):
|
||||
return base_url or request.getfixturevalue("live_server").url
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def pocket_base_url(request):
|
||||
base_url = config("BASE_POCKET_URL", parser=str, default="")
|
||||
if not base_url:
|
||||
pytest.skip("No BASE_POCKET_URL detected in env vars")
|
||||
return base_url
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
@ -1,44 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
import pytest
|
||||
from selenium.webdriver.common.by import By
|
||||
|
||||
from pages.pocket.about import AboutPage
|
||||
|
||||
pytestmark = pytest.mark.pocket_mode
|
||||
|
||||
|
||||
@pytest.mark.nondestructive
|
||||
def test_mobile_menu(pocket_base_url, selenium_mobile):
|
||||
page = AboutPage(selenium_mobile, pocket_base_url).open()
|
||||
assert page.navigation.is_mobile_menu_open_button_displayed
|
||||
page.navigation.open_mobile_menu()
|
||||
assert page.navigation.is_mobile_menu_nav_list_displayed
|
||||
|
||||
assert page.navigation.is_mobile_menu_close_button_displayed
|
||||
page.navigation.close_mobile_menu()
|
||||
assert not page.navigation.is_mobile_menu_nav_list_displayed
|
||||
|
||||
|
||||
@pytest.mark.nondestructive
|
||||
def test_accessible_mobile_menu_open_name(pocket_base_url, selenium_mobile):
|
||||
page = AboutPage(selenium_mobile, pocket_base_url).open()
|
||||
button_label_reference = page.navigation.mobile_menu_open_button.get_attribute("aria-labelledby")
|
||||
string = page.navigation.mobile_menu_open_button.find_element(By.ID, button_label_reference).text
|
||||
assert len(string) > 0
|
||||
|
||||
|
||||
@pytest.mark.nondestructive
|
||||
def test_accessible_mobile_menu_close_name(pocket_base_url, selenium_mobile):
|
||||
page = AboutPage(selenium_mobile, pocket_base_url).open()
|
||||
page.navigation.open_mobile_menu()
|
||||
string = page.navigation.mobile_menu_close_button.text
|
||||
assert len(string) > 0
|
||||
|
||||
|
||||
@pytest.mark.nondestructive
|
||||
def test_mobile_menu_not_displayed_on_desktop(pocket_base_url, selenium):
|
||||
page = AboutPage(selenium, pocket_base_url).open()
|
||||
assert not page.navigation.is_mobile_menu_open_button_displayed
|
|
@ -1,15 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
import pytest
|
||||
|
||||
from pages.pocket.add import AddPage
|
||||
|
||||
pytestmark = pytest.mark.pocket_mode
|
||||
|
||||
|
||||
@pytest.mark.nondestructive
|
||||
def test_mobile_menu(pocket_base_url, selenium_mobile):
|
||||
page = AddPage(selenium_mobile, pocket_base_url).open()
|
||||
assert page.navigation.mobile_nav_not_available
|
|
@ -1,3 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
@ -1,9 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
from pages.pocket.base import BasePage
|
||||
|
||||
|
||||
class AboutPage(BasePage):
|
||||
_URL_TEMPLATE = "/{locale}/about/"
|
|
@ -1,9 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
from pages.pocket.base import BasePage
|
||||
|
||||
|
||||
class AddPage(BasePage):
|
||||
_URL_TEMPLATE = "/{locale}/add/"
|
|
@ -1,112 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
from pypom import Page, Region
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.support import expected_conditions as expected
|
||||
|
||||
|
||||
class BaseRegion(Region):
|
||||
pass
|
||||
|
||||
|
||||
class BasePage(Page):
|
||||
_platform_nav_locator = (By.CSS_SELECTOR, ".pocket-header.platform")
|
||||
|
||||
def __init__(self, selenium, pocket_base_url, locale="en", **url_kwargs):
|
||||
super().__init__(selenium, pocket_base_url, locale=locale, **url_kwargs)
|
||||
|
||||
def wait_for_page_to_load(self):
|
||||
self.wait.until(lambda s: self.seed_url in s.current_url)
|
||||
el = self.find_element(By.TAG_NAME, "html")
|
||||
self.wait.until(lambda s: "loaded" in el.get_attribute("class"))
|
||||
|
||||
# Dismiss cookie prompt before running tests
|
||||
self.wait.until(lambda s: expected.presence_of_element_located(s.find_element(By.ID, "onetrust-banner-sdk")))
|
||||
cookie_banner = self.find_element(By.ID, "onetrust-banner-sdk")
|
||||
self.wait.until(lambda s: "animation-name" not in cookie_banner.get_attribute("style"))
|
||||
|
||||
accept_cookie_button = self.find_element(By.ID, "onetrust-accept-btn-handler")
|
||||
self.wait.until(lambda s: expected.element_to_be_clickable(accept_cookie_button))
|
||||
accept_cookie_button.click()
|
||||
|
||||
self.wait.until(lambda s: cookie_banner.is_displayed() is False)
|
||||
|
||||
return self
|
||||
|
||||
@property
|
||||
def URL_TEMPLATE(self):
|
||||
if "{params}" in self._URL_TEMPLATE:
|
||||
return f"{self._URL_TEMPLATE}&automation=true"
|
||||
else:
|
||||
return f"{self._URL_TEMPLATE}?automation=true"
|
||||
|
||||
@property
|
||||
def navigation(self):
|
||||
if self.is_element_displayed(*self._platform_nav_locator):
|
||||
return self.NavigationPlatform(self)
|
||||
else:
|
||||
return self.Navigation(self)
|
||||
|
||||
class Navigation(BaseRegion):
|
||||
_content_wrapper_locator = (By.TAG_NAME, "body")
|
||||
_mobile_menu_open_btn_locator = (By.CLASS_NAME, "global-nav-mobile-menu-btn")
|
||||
_mobile_menu_close_btn_locator = (By.CLASS_NAME, "mobile-nav-close-btn")
|
||||
_mobile_menu_wrapper_locator = (By.CLASS_NAME, "mobile-nav-wrapper")
|
||||
_mobile_menu_nav_list_locator = (By.CSS_SELECTOR, ".mobile-nav-list")
|
||||
|
||||
@property
|
||||
def is_mobile_menu_nav_list_displayed(self):
|
||||
return self.is_element_displayed(*self._mobile_menu_nav_list_locator)
|
||||
|
||||
@property
|
||||
def is_mobile_menu_open(self):
|
||||
return (
|
||||
"mobile-nav-open" in self.find_element(*self._content_wrapper_locator).get_attribute("class")
|
||||
and self.mobile_menu_open_button.get_attribute("aria-expanded") == "true"
|
||||
and self.wait.until(lambda s: self.is_mobile_menu_close_button_displayed)
|
||||
)
|
||||
|
||||
@property
|
||||
def is_mobile_menu_closed(self):
|
||||
return (
|
||||
"mobile-nav-open" not in self.find_element(*self._content_wrapper_locator).get_attribute("class")
|
||||
and self.mobile_menu_open_button.get_attribute("aria-expanded") == "false"
|
||||
and self.wait.until(lambda s: not self.is_mobile_menu_nav_list_displayed)
|
||||
)
|
||||
|
||||
@property
|
||||
def is_mobile_menu_open_button_displayed(self):
|
||||
return self.is_element_displayed(*self._mobile_menu_open_btn_locator)
|
||||
|
||||
@property
|
||||
def is_mobile_menu_close_button_displayed(self):
|
||||
return self.is_element_displayed(*self._mobile_menu_close_btn_locator)
|
||||
|
||||
@property
|
||||
def mobile_menu_open_button(self):
|
||||
return self.find_element(*self._mobile_menu_open_btn_locator)
|
||||
|
||||
@property
|
||||
def mobile_menu_close_button(self):
|
||||
return self.find_element(*self._mobile_menu_close_btn_locator)
|
||||
|
||||
def open_mobile_menu(self):
|
||||
assert not self.is_mobile_menu_open, "Menu is already open"
|
||||
self.mobile_menu_open_button.click()
|
||||
self.wait.until(lambda s: self.is_mobile_menu_open)
|
||||
return self
|
||||
|
||||
def close_mobile_menu(self):
|
||||
assert not self.is_mobile_menu_closed, "Menu is already closed"
|
||||
self.mobile_menu_close_button.click()
|
||||
self.wait.until(lambda s: self.is_mobile_menu_closed)
|
||||
return self
|
||||
|
||||
class NavigationPlatform(BaseRegion):
|
||||
_mobile_menu_open_btn_locator = (By.CLASS_NAME, "global-nav-mobile-menu-btn")
|
||||
|
||||
@property
|
||||
def mobile_nav_not_available(self):
|
||||
return not self.is_element_displayed(*self._mobile_menu_open_btn_locator)
|
Загрузка…
Ссылка в новой задаче