Skip to content

Commit da0501c

Browse files
Merge branch 'main' into philimon/suite_refactor
2 parents ed5952e + 239b0de commit da0501c

File tree

48 files changed

+647
-158
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+647
-158
lines changed

Pipfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ taskcluster-taskgraph = "==9.0.0"
1717
jsonpath-ng = "1.6.1"
1818
pillow = "<10.5"
1919
pyfxa = "0.7.0"
20-
ruff = "0.5.2"
20+
ruff = "0.9.6"
2121
pytest-rerunfailures = "14.0"
2222
slack-sdk = "3.31.0"
2323
google-cloud-storage = "2.18.0"

SELECTOR_INFO.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,6 +1368,20 @@ Location: Address bar
13681368
Path to .json: modules/data/autofill_popup.components.json
13691369
```
13701370
```
1371+
Selector Name: address-doorhanger-email
1372+
Selector Data: "div.address-save-update-row-container:nth-of-type(2) div p:first-of-type span"
1373+
Description: Save address doorhanger email section
1374+
Location: Address bar
1375+
Path to .json: modules/data/autofill_popup.components.json
1376+
```
1377+
```
1378+
Selector Name: address-doorhanger-phone
1379+
Selector Data: "div.address-save-update-row-container:nth-of-type(2) div p:nth-of-type(2) span"
1380+
Description: Save address doorhanger phone section
1381+
Location: Address bar
1382+
Path to .json: modules/data/autofill_popup.components.json
1383+
```
1384+
```
13711385
Selector Name: address-doorhanger-name
13721386
Selector Data: "div.address-save-update-row-container:nth-of-type(1) div p:first-of-type span"
13731387
Description: Save address doorhanger name section
@@ -1381,6 +1395,48 @@ Description: Save address doorhanger organization section
13811395
Location: Address bar
13821396
Path to .json: modules/data/autofill_popup.components.json
13831397
```
1398+
```
1399+
Selector Name: address-doorhanger-street
1400+
Selector Data: "div.address-save-update-row-container:nth-of-type(1) div p:nth-of-type(3) span"
1401+
Description: Save address doorhanger street address section
1402+
Location: Address bar
1403+
Path to .json: modules/data/autofill_popup.components.json
1404+
```
1405+
```
1406+
Selector Name: address-doorhanger-city
1407+
Selector Data: "div.address-save-update-row-container:nth-of-type(1) div p:nth-of-type(4) span:nth-of-type(1)"
1408+
Description: Save address doorhanger city section
1409+
Location: Address bar
1410+
Path to .json: modules/data/autofill_popup.components.json
1411+
```
1412+
```
1413+
Selector Name: address-doorhanger-state
1414+
Selector Data: "div.address-save-update-row-container:nth-of-type(1) div p:nth-of-type(4) span:nth-of-type(3)"
1415+
Description: Save address doorhanger state section
1416+
Location: Address bar
1417+
Path to .json: modules/data/autofill_popup.components.json
1418+
```
1419+
```
1420+
Selector Name: address-doorhanger-zip
1421+
Selector Data: "div.address-save-update-row-container:nth-of-type(1) div p:nth-of-type(4) span:nth-of-type(5)"
1422+
Description: Save address doorhanger zip section for US and CA
1423+
Location: Address bar
1424+
Path to .json: modules/data/autofill_popup.components.json
1425+
```
1426+
```
1427+
Selector Name: address-doorhanger-zip-other
1428+
Selector Data: "selectorData": "div.address-save-update-row-container:nth-of-type(1) div p:nth-of-type(4) span:nth-of-type(3)",
1429+
Description: Save address doorhanger zip section for other regions
1430+
Location: Address bar
1431+
Path to .json: modules/data/autofill_popup.components.json
1432+
```
1433+
```
1434+
Selector Name: address-doorhanger-country
1435+
Selector Data: "div.address-save-update-row-container:nth-of-type(1) div p:nth-of-type(5) span"
1436+
Description: Save address doorhanger country section
1437+
Location: Address bar
1438+
Path to .json: modules/data/autofill_popup.components.json
1439+
```
13841440
#### context_menu
13851441
```
13861442
Selector Name: context-menu-search-selected-text

collect_executables.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,23 +111,23 @@ def get_gd_platform():
111111
minor = int(minor)
112112
beta = int(beta)
113113

114-
next_major = f"{major+1}.0b1"
114+
next_major = f"{major + 1}.0b1"
115115
fx_download_dir_url = f"https://archive.mozilla.org/pub/firefox/candidates/{next_major}-candidates/build1/"
116116
rs = requests.get(fx_download_dir_url)
117117
if rs.status_code < 300:
118118
latest_beta_ver = next_major
119119
this_beta = next_major
120120
continue
121121

122-
next_minor = f"{major}.{minor+1}b1"
122+
next_minor = f"{major}.{minor + 1}b1"
123123
fx_download_dir_url = f"https://archive.mozilla.org/pub/firefox/candidates/{next_minor}-candidates/build1/"
124124
rs = requests.get(fx_download_dir_url)
125125
if rs.status_code < 300:
126126
latest_beta_ver = next_minor
127127
this_beta = next_minor
128128
continue
129129

130-
next_beta = f"{major}.{minor}b{beta+1}"
130+
next_beta = f"{major}.{minor}b{beta + 1}"
131131
fx_download_dir_url = f"https://archive.mozilla.org/pub/firefox/candidates/{next_beta}-candidates/build1/"
132132
rs = requests.get(fx_download_dir_url)
133133
if rs.status_code < 300:
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import pytest
2+
from selenium.webdriver import Firefox
3+
4+
from modules.browser_object_autofill_popup import AutofillPopup
5+
from modules.page_object_autofill import AddressFill
6+
from modules.page_object_prefs import AboutPrefs
7+
from modules.util import BrowserActions, Utilities
8+
9+
10+
@pytest.fixture()
11+
def test_case():
12+
return "2888703"
13+
14+
15+
def test_demo_ad_address_data_captured_in_doorhanger_and_stored(
16+
driver: Firefox, region: str
17+
):
18+
"""
19+
C2888703 - Verify Address data are captured in the Capture Doorhanger and stored in about:preferences
20+
"""
21+
# instantiate objects
22+
address_autofill = AddressFill(driver)
23+
address_autofill_popup = AutofillPopup(driver)
24+
util = Utilities()
25+
browser_action_obj = BrowserActions(driver)
26+
27+
# create fake data and fill it in
28+
address_autofill.open()
29+
address_autofill_data = util.fake_autofill_data(region)
30+
address_autofill.save_information_basic(address_autofill_data)
31+
32+
# The "Save address?" doorhanger is displayed
33+
address_autofill_popup.element_visible("address-save-doorhanger")
34+
35+
# containing Street Address field
36+
expected_street_add = address_autofill_data.street_address
37+
address_autofill_popup.element_has_text(
38+
"address-doorhanger-street", expected_street_add
39+
)
40+
41+
# containing City field
42+
expected_city = address_autofill_data.address_level_2
43+
address_autofill_popup.element_has_text("address-doorhanger-city", expected_city)
44+
45+
expected_state = address_autofill_data.address_level_1
46+
if region not in ["FR", "DE"]:
47+
state_abbreviation = util.get_state_province_abbreviation(expected_state)
48+
address_autofill_popup.element_has_text(
49+
"address-doorhanger-state", state_abbreviation
50+
)
51+
52+
# Verify Zip Code field (Different selector for DE/FR)
53+
expected_zip = address_autofill_data.postal_code
54+
zip_selector = (
55+
"address-doorhanger-zip-other"
56+
if region in ["FR", "DE"]
57+
else "address-doorhanger-zip"
58+
)
59+
address_autofill_popup.element_has_text(zip_selector, expected_zip)
60+
61+
# containing Country field
62+
expected_country = address_autofill_data.country
63+
address_autofill_popup.element_has_text(
64+
"address-doorhanger-country", expected_country
65+
)
66+
67+
# Click the "Save" button
68+
address_autofill_popup.click_doorhanger_button("save")
69+
70+
# Navigate to about:preferences#privacy => "Autofill" section
71+
about_prefs = AboutPrefs(driver, category="privacy").open()
72+
iframe = about_prefs.get_save_addresses_popup_iframe()
73+
browser_action_obj.switch_to_iframe_context(iframe)
74+
75+
# Verify saved addresses
76+
elements = about_prefs.get_elements("saved-addresses-values")
77+
78+
# Expected values for verification
79+
expected_values = [
80+
expected_street_add,
81+
expected_city,
82+
expected_zip,
83+
expected_country,
84+
]
85+
if region not in ["FR", "DE"]:
86+
expected_values.insert(2, expected_state)
87+
88+
# Check if all expected values exist in any saved address
89+
found_address_data = any(
90+
all(value in element.text for value in expected_values) for element in elements
91+
)
92+
assert found_address_data, (
93+
"Street, city, state (if applicable), zip, or country were not found in any of the address entries!"
94+
)
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import pytest
2+
from selenium.webdriver import Firefox
3+
4+
from modules.browser_object_autofill_popup import AutofillPopup
5+
from modules.page_object_autofill import AddressFill
6+
from modules.page_object_prefs import AboutPrefs
7+
from modules.util import BrowserActions, Utilities
8+
9+
10+
@pytest.fixture()
11+
def test_case():
12+
return "2886581"
13+
14+
15+
def test_demo_ad_email_phone_captured_in_doorhanger_and_stored(
16+
driver: Firefox, region: str
17+
):
18+
"""
19+
C2888704 - Verify tele/email data are captured in the Capture Doorhanger and stored in about:preferences
20+
"""
21+
# instantiate objects
22+
address_autofill = AddressFill(driver)
23+
address_autofill_popup = AutofillPopup(driver)
24+
util = Utilities()
25+
browser_action_obj = BrowserActions(driver)
26+
27+
# create fake data and fill it in
28+
address_autofill.open()
29+
address_autofill_data = util.fake_autofill_data(region)
30+
address_autofill.save_information_basic(address_autofill_data)
31+
32+
# The "Save address?" doorhanger is displayed
33+
address_autofill_popup.element_visible("address-save-doorhanger")
34+
35+
# containing email field
36+
expected_email = address_autofill_data.email
37+
address_autofill_popup.element_has_text("address-doorhanger-email", expected_email)
38+
39+
# containing phone field
40+
expected_phone = address_autofill_data.telephone
41+
with driver.context(driver.CONTEXT_CHROME):
42+
actual_phone = address_autofill_popup.get_element(
43+
"address-doorhanger-phone"
44+
).text
45+
normalize_expected = util.normalize_phone_number(expected_phone)
46+
normalized_actual = util.normalize_phone_number(actual_phone)
47+
assert normalized_actual == normalize_expected
48+
49+
# Click the "Save" button
50+
address_autofill_popup.click_doorhanger_button("save")
51+
52+
# Navigate to about:preferences#privacy => "Autofill" section
53+
about_prefs = AboutPrefs(driver, category="privacy").open()
54+
iframe = about_prefs.get_save_addresses_popup_iframe()
55+
browser_action_obj.switch_to_iframe_context(iframe)
56+
57+
# The address saved in step 2 is listed in the "Saved addresses" modal: Email and phone
58+
elements = about_prefs.get_elements("saved-addresses-values")
59+
expected_values = [expected_phone, expected_email]
60+
found_email_phone = any(
61+
all(value in element.text for value in expected_values) for element in elements
62+
)
63+
assert found_email_phone, (
64+
"Email or phone were not found in any of the address entries!"
65+
)

l10n_CM/Unified/test_demo_ad_name_org_captured_in_doorhanger_and_stored.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,6 @@ def test_demo_ad_name_org_captured_in_doorhanger_and_stored(
5959
found_name_org = any(
6060
all(value in element.text for value in expected_values) for element in elements
6161
)
62-
assert (
63-
found_name_org
64-
), "Name or organization were not found in any of the address entries!"
62+
assert found_name_org, (
63+
"Name or organization were not found in any of the address entries!"
64+
)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import pytest
2+
from selenium.webdriver import Firefox
3+
4+
from modules.browser_object_autofill_popup import AutofillPopup
5+
from modules.page_object import AboutPrefs, CreditCardFill
6+
from modules.util import BrowserActions, Utilities
7+
8+
9+
@pytest.fixture()
10+
def test_case():
11+
return "2886602"
12+
13+
14+
def test_cc_clear_form(driver: Firefox):
15+
"""
16+
C2886602 - Verify that clearing the form from any field results in all fields being emptied, regardless of the
17+
field from which the clear action was triggered.
18+
"""
19+
20+
# Initialize objects
21+
util = Utilities()
22+
about_prefs = AboutPrefs(driver, category="privacy")
23+
about_prefs_cc_popup = AboutPrefs(driver)
24+
browser_action_obj = BrowserActions(driver)
25+
credit_card_fill_obj = CreditCardFill(driver)
26+
autofill_popup = AutofillPopup(driver)
27+
28+
# Save a credit card in about:preferences
29+
about_prefs.open()
30+
iframe = about_prefs.get_saved_payments_popup_iframe()
31+
browser_action_obj.switch_to_iframe_context(iframe)
32+
credit_card_sample_data = util.fake_credit_card_data()
33+
about_prefs_cc_popup.click_on(
34+
"panel-popup-button", labels=["autofill-manage-add-button"]
35+
)
36+
about_prefs.fill_cc_panel_information(credit_card_sample_data)
37+
38+
# Open credit card form page, clear form and verify all fields are empty
39+
credit_card_fill_obj.open()
40+
credit_card_fill_obj.verify_clear_form_all_fields(autofill_popup)

l10n_CM/region/CA.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
"test_demo_cc_doorhanger_shown_on_valid_credit_card_submission.py",
55
"test_demo_cc_add_new_credit_card.py",
66
"test_demo_ad_doorhanger_shown_on_valid_address_submission.py",
7+
"test_demo_ad_email_phone_captured_in_doorhanger_and_stored.py",
78
"test_demo_ad_name_org_captured_in_doorhanger_and_stored.py",
8-
"test_demo_cc_dropdown-presence.py"
9+
"test_demo_ad_address_data_captured_in_doorhanger_and_stored.py",
10+
"test_demo_cc_dropdown-presence.py",
11+
"test_demo_cc_clear_form.py"
912
]
1013
}

l10n_CM/region/DE.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
"test_demo_cc_doorhanger_shown_on_valid_credit_card_submission.py",
55
"test_demo_cc_add_new_credit_card.py",
66
"test_demo_ad_doorhanger_shown_on_valid_address_submission.py",
7+
"test_demo_ad_email_phone_captured_in_doorhanger_and_stored.py",
78
"test_demo_ad_name_org_captured_in_doorhanger_and_stored.py",
8-
"test_demo_cc_dropdown-presence.py"
9+
"test_demo_cc_dropdown-presence.py",
10+
"test_demo_ad_address_data_captured_in_doorhanger_and_stored.py",
11+
"test_demo_cc_clear_form.py"
912
]
1013
}

l10n_CM/region/FR.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
"test_demo_cc_add_new_credit_card.py",
66
"test_demo_ad_doorhanger_shown_on_valid_address_submission.py",
77
"test_demo_ad_name_org_captured_in_doorhanger_and_stored.py",
8+
"test_demo_cc_dropdown-presence.py",
9+
"test_demo_ad_email_phone_captured_in_doorhanger_and_stored.py",
810
"test_demo_cc_dropdown-presence.py"
11+
"test_demo_cc_clear_form.py"
912
]
1013
}

0 commit comments

Comments
 (0)