Skip to content

Commit e59f8ee

Browse files
committed
Merge branch 'main' into vs/refactor-theme-toolbar
2 parents 4c9fa2a + 75bbbdd commit e59f8ee

23 files changed

+709
-198
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"url": "http://127.0.0.1:8080/libro_ad.html",
3+
"field_mapping": {
4+
"given_name": "b885db87-1444-4b2b-b89b-0b54d68d996f",
5+
"family_name": "60415c70-d843-4a4b-a8ce-77533b890efe",
6+
"organization": "a74e6520-0204-4ccb-879e-e8537f826bd6",
7+
"address_line_1": "194c240e-caa3-41d1-99a4-3fb46ea5910c",
8+
"postal_code": "a95979b5-b91b-423f-825d-48112c1c27ec",
9+
"telephone": "443642dc-9c22-4601-926e-35377961b5fc"
10+
},
11+
12+
"form_field": "*[data-moz-autofill-inspect-id='{given_name}']",
13+
"fields": [
14+
"b885db87-1444-4b2b-b89b-0b54d68d996f",
15+
"60415c70-d843-4a4b-a8ce-77533b890efe",
16+
"a74e6520-0204-4ccb-879e-e8537f826bd6",
17+
"194c240e-caa3-41d1-99a4-3fb46ea5910c",
18+
"a95979b5-b91b-423f-825d-48112c1c27ec",
19+
"443642dc-9c22-4601-926e-35377961b5fc"
20+
],
21+
"skipped": [
22+
"test_demo_ad_2a_preview_name_org_fields.py",
23+
"test_demo_ad_2b_preview_address_fields.py",
24+
"test_demo_ad_2c_preview_phone_email_fields.py",
25+
"test_demo_ad_3a_autofill_address_fields.py",
26+
"test_demo_ad_3b_autofill_name_org_fields.py",
27+
"test_demo_ad_3c_autofill_phone_email_fields.py"
28+
]
29+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"url": "http://127.0.0.1:8080/libro_cc.html",
3+
"field_mapping": {
4+
"name": "eecd3f4f-88a3-4c6f-9a9d-ed6995e01262",
5+
"card_number": "7dbcf6d8-5b68-40ca-a6a4-fd8ddff7f1ac",
6+
"expiration_date": "aac8243e-eb03-4a84-a213-b25a7c43f7f3",
7+
"cvv": "e0564b06-322a-4320-8c4b-fb134ca2a1ad"
8+
},
9+
"form_field": "*[data-moz-autofill-inspect-id='{name}']",
10+
"fields": [
11+
"eecd3f4f-88a3-4c6f-9a9d-ed6995e01262",
12+
"7dbcf6d8-5b68-40ca-a6a4-fd8ddff7f1ac",
13+
"aac8243e-eb03-4a84-a213-b25a7c43f7f3",
14+
"e0564b06-322a-4320-8c4b-fb134ca2a1ad"
15+
]
16+
}

l10n_CM/region/AT.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"hofer",
88
"holzkern",
99
"kastnerandoehler",
10+
"libro",
1011
"mediamarkt"
1112
],
1213
"tests": [

l10n_CM/run_l10n.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
"lakeland",
6767
"leevalley",
6868
"leroymerlin",
69+
"libro",
6970
"lookfantastic",
7071
"lowes",
7172
"mediamarkt",

l10n_CM/sites/libro/AT/libro_ad.html

Lines changed: 400 additions & 0 deletions
Large diffs are not rendered by default.

l10n_CM/sites/libro/AT/libro_cc.html

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

modules/browser_object_forget_panel.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,33 @@
55

66
class ForgetPanel(BasePage):
77
"""
8-
BOM for the forget panel
8+
BOM for the Forget Panel
99
"""
1010

1111
URL_TEMPLATE = ""
1212

13+
def select_timeframe(
14+
self,
15+
timeframe: Literal["forget-five-minutes", "forget-two-hours", "forget-one-day"],
16+
) -> "ForgetPanel":
17+
"""
18+
Select a specific timeframe option in the forget panel.
19+
This will click the option regardless of what's currently selected.
20+
21+
Argument:
22+
timeframe: Timeframe to forget. Restricted options to "forget-five-minutes",
23+
"forget-two-hours", or "forget-one-day"
24+
"""
25+
self.click_on(timeframe)
26+
return self
27+
1328
def forget_history(
1429
self,
1530
timeframe: Literal["forget-five-minutes", "forget-two-hours", "forget-one-day"],
16-
) -> BasePage:
17-
with self.driver.context(self.driver.CONTEXT_CHROME):
18-
self.get_element(timeframe).click()
19-
self.get_element("forget-confirm-button").click()
20-
return self
31+
) -> "ForgetPanel":
32+
"""
33+
Forget browsing history for a given timeframe.
34+
"""
35+
self.select_timeframe(timeframe)
36+
self.click_on("forget-confirm-button")
37+
return self

modules/browser_object_navigation.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
from typing import Literal
23

34
from selenium.common.exceptions import TimeoutException
45
from selenium.webdriver import ActionChains, Firefox
@@ -342,6 +343,12 @@ def select_element_in_nav(self, element: str) -> BasePage:
342343
self.get_element(element).click()
343344
return self
344345

346+
@BasePage.context_chrome
347+
def open_forget_panel(self) -> BasePage:
348+
"""Open the Forget Panel by clicking the Forget button in the toolbar."""
349+
self.get_element("forget-button").click()
350+
return self
351+
345352
@BasePage.context_chrome
346353
def get_legacy_search_engine_label(self) -> str:
347354
"""Return the displayed engine name from the legacy search bar."""
@@ -652,3 +659,43 @@ def expect_bookmarks_toolbar_visibility(self, expected: bool) -> None:
652659
self.expect_element_attribute_contains(
653660
self.bookmarks_toolbar, "collapsed", expected_value
654661
)
662+
663+
#
664+
def set_site_autoplay_permission(
665+
self,
666+
settings: Literal["allow-audio-video", "block-audio-video", "allow-audio-only"],
667+
) -> BasePage:
668+
"""
669+
Open the Site audio-video permission panel and set a specific autoplay setting.
670+
671+
Arguments:
672+
settings: "allow-audio-video" → Allow Audio and Video, "block-audio-video" → Block Audio and Video,
673+
"allow-audio-only" → Allow Audio but block Video
674+
"""
675+
self.click_on("autoplay-icon-blocked")
676+
677+
if settings == "allow-audio-video":
678+
self.element_clickable("permission-popup-audio-blocked")
679+
self.click_on("permission-popup-audio-blocked")
680+
self.click_and_hide_menu("allow-audio-video-menuitem")
681+
682+
elif settings == "block-audio-video":
683+
self.element_clickable("permission-popup-audio-video-allowed")
684+
self.click_and_hide_menu("block-audio-video-menuitem")
685+
686+
elif settings == "allow-audio-only":
687+
self.element_clickable("permission-popup-audio-video-allowed")
688+
self.click_and_hide_menu("allow-audio-only-menuitem")
689+
return self
690+
691+
def verify_autoplay_state(self, expected: Literal["allow", "block"]) -> None:
692+
"""Verify the current state of the autoplay permission panel and icon.
693+
Arguments:
694+
expected: "allow" → Allow Audio and Video, "block" → Block Audio and Video
695+
"""
696+
if expected == "allow":
697+
self.element_visible("permission-popup-audio-video-allowed")
698+
self.element_not_visible("autoplay-icon-blocked")
699+
else:
700+
self.element_visible("permission-popup-audio-video-blocked")
701+
self.element_visible("autoplay-icon-blocked")

modules/browser_object_tabbar.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,13 @@ def get_tab_title(self, tab_element: WebElement) -> str:
136136
tab_label = tab_element.find_element(*self.get_selector("tab-title"))
137137
return tab_label.text
138138

139+
@BasePage.context_chrome
139140
def expect_tab_sound_status(
140141
self, identifier: Union[str, int], status: MediaStatus
141142
) -> BasePage:
142-
"""Check to see if the tab has an expected MediaStatus"""
143+
"""
144+
Check to see if the tab has an expected MediaStatus
145+
"""
143146
tab = self.get_tab(identifier)
144147
self.wait.until(lambda _: tab.get_attribute(status) is not None)
145148
return self
@@ -283,12 +286,33 @@ def close_tab(self, tab: WebElement) -> BasePage:
283286
self.get_element("tab-x-icon", parent_element=tab).click()
284287
return self
285288

286-
def open_web_page_in_new_tab(self, web_page: BasePage, num_tabs: int) -> BasePage:
289+
def open_single_page_in_new_tab(self, page: BasePage, num_tabs: int) -> BasePage:
287290
"""
288291
Opens a new tab, switches the driver context to the new tab, and opens the given webpage
292+
Arguments:
293+
page: The page object to open in the new tab
294+
num_tabs: Expected total number of tabs after opening the new tab (used for waiting)
289295
"""
290296
self.new_tab_by_button()
291297
self.wait_for_num_tabs(num_tabs)
292298
self.driver.switch_to.window(self.driver.window_handles[-1])
293-
web_page.open()
299+
page.open()
300+
return self
301+
302+
def open_multiple_tabs_with_pages(self, pages: list) -> "TabBar":
303+
"""
304+
Opens multiple new tabs and navigates to different pages in each tab.
305+
306+
Argument:
307+
pages: List of page objects or URLs to open in separate tabs
308+
"""
309+
for page in pages:
310+
self.new_tab_by_button()
311+
self.wait_for_num_tabs(len(self.driver.window_handles))
312+
self.driver.switch_to.window(self.driver.window_handles[-1])
313+
314+
if isinstance(page, str):
315+
self.driver.get(page)
316+
else:
317+
page.open()
294318
return self

modules/data/navigation.components.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -501,12 +501,6 @@
501501
"groups": []
502502
},
503503

504-
"autoplay-permission": {
505-
"selectorData": "blocked-permissions-container",
506-
"strategy": "id",
507-
"groups": []
508-
},
509-
510504
"permissions-location-icon": {
511505
"selectorData": "permissions-granted-icon",
512506
"strategy": "id",

0 commit comments

Comments
 (0)