Skip to content

Commit 87c3bb0

Browse files
committed
Add FXIOS-14366 [Trending Searches] UI test using new POM method
1 parent 7c7f6dc commit 87c3bb0

File tree

8 files changed

+417
-69
lines changed

8 files changed

+417
-69
lines changed

firefox-ios/Client/Application/AccessibilityIdentifiers.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,8 +494,14 @@ struct AccessibilityIdentifiers {
494494
static let deleteButton = "Delete"
495495
static let showPrivateSuggestions = "PrivateMode.showPrivateSuggestions"
496496
static let showTrendingSearches = "showTrendingSearch"
497+
// This is based on `PrefsKeys.SearchSettings.showTrendingSearches`
498+
static let showTrendingSearchesSwitch = "trendingSearchesFeatureKey"
497499
static let showRecentSearches = "showRecentSearch"
500+
// This is based on `PrefsKeys.SearchSettings.showRecentSearches`
501+
static let showRecentSearchesSwitch = "recentSearchesFeatureKey"
498502
static let showSearchSuggestions = "FirefoxSuggestShowSearchSuggestions"
503+
static let backButtoniOS26 = "BackButton"
504+
static let backButton = "Settings"
499505
}
500506

501507
struct AdvancedAccountSettings {

firefox-ios/firefox-ios-tests/Tests/ExperimentIntegrationTests.xctestplan

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,10 @@
170170
"SearchSettingsUITests",
171171
"SearchTests\/testBottomVIewURLBar_TAE()",
172172
"SearchTests\/testOpenTabsInSearchSuggestions_TAE()",
173+
"SearchTests\/testRecentSearchesSettingsToggleOff_recentSearchesExperimentOn()",
174+
"SearchTests\/testRecentSearchesSettingsToggleOn_recentSearchesExperimentOn()",
175+
"SearchTests\/testRecentSearchesWithNoRecentSearches_recentSearchesExperimentOn()",
176+
"SearchTests\/testRecentSearches_recentSearchesExperimentOn()",
173177
"SearchTests\/testSearchEngine_TAE()",
174178
"SearchTests\/testSearchStartAfterTypingTwoWords_TAE()",
175179
"SearchTests\/testTrendingSearchesAndRecentSearchesSettingsToggleOn_trendingSearchesAndRecentSearchesExperimentOn()",

firefox-ios/firefox-ios-tests/Tests/Smoketest.xctestplan

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,10 @@
484484
"SearchTests\/testPrivateModeSearchSuggestsOnOffAndGeneralSearchSuggestsOff_feltPrivacySimplifiedUIExperimentOn()",
485485
"SearchTests\/testPrivateModeSearchSuggestsOnOffAndGeneralSearchSuggestsOn_feltPrivacySimplifiedUIExperimentOn()",
486486
"SearchTests\/testPromptPresence()",
487+
"SearchTests\/testRecentSearchesSettingsToggleOff_recentSearchesExperimentOn()",
488+
"SearchTests\/testRecentSearchesSettingsToggleOn_recentSearchesExperimentOn()",
489+
"SearchTests\/testRecentSearchesWithNoRecentSearches_recentSearchesExperimentOn()",
490+
"SearchTests\/testRecentSearches_recentSearchesExperimentOn()",
487491
"SearchTests\/testSearchEngine_TAE()",
488492
"SearchTests\/testSearchIconOnAboutHome()",
489493
"SearchTests\/testSearchStartAfterTypingTwoWords_TAE()",
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// This Source Code Form is subject to the terms of the Mozilla Public
2+
// License, v. 2.0. If a copy of the MPL was not distributed with this
3+
// file, You can obtain one at http://mozilla.org/MPL/2.0/
4+
5+
import XCTest
6+
7+
@MainActor
8+
final class SearchScreen {
9+
private let app: XCUIApplication
10+
private let sel: SearchSelectorsSet
11+
12+
private var searchTable: XCUIElement { sel.SEARCH_TABLE.element(in: app) }
13+
private var recentSearchesSectionTitle: XCUIElement { sel.RECENT_SEARCHES_SECTION_TITLE.element(in: app) }
14+
15+
init(app: XCUIApplication, selectors: SearchSelectorsSet = SearchSelectors()) {
16+
self.app = app
17+
self.sel = selectors
18+
}
19+
20+
func assertSearchTableVisible() {
21+
BaseTestCase().mozWaitForElementToExist(searchTable)
22+
}
23+
24+
func assertSearchSectionVisible(with engineName: String) {
25+
let text = sel.searchSectionTitle(with: engineName).element(in: app)
26+
BaseTestCase().mozWaitForElementToExist(text)
27+
}
28+
29+
func tapOnFirstCell() {
30+
searchTable.cells.firstMatch.waitAndTap()
31+
}
32+
33+
func assertTrendingSearchesSectionTitle(with engineName: String) {
34+
let text = sel.trendingSearchesSectionTitle(with: engineName).element(in: app)
35+
BaseTestCase().mozWaitForElementToExist(text)
36+
}
37+
38+
func assertTrendingSearchesSectionTitleDoesNotExist(with engineName: String) {
39+
let text = sel.trendingSearchesSectionTitle(with: engineName).element(in: app)
40+
BaseTestCase().mozWaitForElementToNotExist(recentSearchesSectionTitle)
41+
}
42+
43+
func assertRecentSearchesSectionTitle() {
44+
BaseTestCase().mozWaitForElementToExist(recentSearchesSectionTitle)
45+
}
46+
47+
func assertRecentSearchesSectionTitleDoesNotExist() {
48+
BaseTestCase().mozWaitForElementToNotExist(recentSearchesSectionTitle)
49+
}
50+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// This Source Code Form is subject to the terms of the Mozilla Public
2+
// License, v. 2.0. If a copy of the MPL was not distributed with this
3+
// file, You can obtain one at http://mozilla.org/MPL/2.0/
4+
5+
import XCTest
6+
7+
@MainActor
8+
final class SearchSettingsScreen {
9+
private let app: XCUIApplication
10+
private let sel: SearchSettingsSelectorsSet
11+
12+
private var navBar: XCUIElement { sel.NAVBAR.element(in: app) }
13+
private var trendingSearchesToggle: XCUIElement { sel.TRENDING_SEARCH_SWITCH.element(in: app) }
14+
private var recentSearchesToggle: XCUIElement { sel.RECENT_SEARCH_SWITCH.element(in: app) }
15+
16+
init(app: XCUIApplication, selectors: SearchSettingsSelectorsSet = SearchSettingsSelectors()) {
17+
self.app = app
18+
self.sel = selectors
19+
}
20+
21+
func assertNavBarVisible() {
22+
BaseTestCase().mozWaitForElementToExist(navBar)
23+
}
24+
25+
func tapOnBackButton() {
26+
var backButton = sel.BACK_BUTTON.element(in: app)
27+
if #available(iOS 26, *) {
28+
backButton = sel.BACK_BUTTON_iOS26.element(in: app)
29+
}
30+
backButton.waitAndTap()
31+
}
32+
33+
func assertTrendingSearchesSwitchIsOn() {
34+
BaseTestCase().mozWaitForElementToExist(trendingSearchesToggle)
35+
36+
let value = trendingSearchesToggle.value as? String
37+
XCTAssertEqual(value, "1", "Expected 'Enable Trending Searches' switch to be ON (value = 1), but got \(String(describing: value))")
38+
}
39+
40+
func tapOnTrendingSearchesSwitch() {
41+
trendingSearchesToggle.waitAndTap()
42+
}
43+
44+
func assertTrendingSearchesSwitchIsOff() {
45+
BaseTestCase().mozWaitForElementToExist(trendingSearchesToggle)
46+
47+
let value = trendingSearchesToggle.value as? String
48+
XCTAssertEqual(value, "0", "Expected 'Enable Translations' switch to be OFF (value = 0), but got \(String(describing: value))")
49+
}
50+
51+
func assertTrendingSearchesSwitchDoesNotExist() {
52+
BaseTestCase().mozWaitForElementToNotExist(trendingSearchesToggle)
53+
}
54+
55+
func assertRecentSearchesSwitchIsOn() {
56+
BaseTestCase().mozWaitForElementToExist(recentSearchesToggle)
57+
58+
let value = recentSearchesToggle.value as? String
59+
XCTAssertEqual(value, "1", "Expected 'Enable Recent Searches' switch to be ON (value = 1), but got \(String(describing: value))")
60+
}
61+
62+
func tapOnRecentSearchesSwitch() {
63+
recentSearchesToggle.waitAndTap()
64+
}
65+
66+
func assertRecentSearchesSwitchIsOff() {
67+
BaseTestCase().mozWaitForElementToExist(recentSearchesToggle)
68+
69+
let value = recentSearchesToggle.value as? String
70+
XCTAssertEqual(value, "0", "Expected 'Enable Recent Searches' switch to be OFF (value = 0), but got \(String(describing: value))")
71+
}
72+
73+
func assertRecentSearchesSwitchDoesNotExist() {
74+
BaseTestCase().mozWaitForElementToNotExist(recentSearchesToggle)
75+
}
76+
}

0 commit comments

Comments
 (0)