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/. */
5 package org.mozilla.fenix.ui
7 import android.content.Context
8 import android.hardware.camera2.CameraManager
9 import androidx.compose.ui.test.junit4.AndroidComposeTestRule
10 import androidx.core.net.toUri
11 import androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu
12 import androidx.test.espresso.Espresso.pressBack
13 import mozilla.components.concept.engine.utils.EngineReleaseChannel
14 import okhttp3.mockwebserver.MockWebServer
15 import org.junit.After
16 import org.junit.Assume.assumeTrue
17 import org.junit.Before
18 import org.junit.Ignore
21 import org.mozilla.fenix.customannotations.SmokeTest
22 import org.mozilla.fenix.ext.components
23 import org.mozilla.fenix.ext.settings
24 import org.mozilla.fenix.helpers.AppAndSystemHelper.assertNativeAppOpens
25 import org.mozilla.fenix.helpers.AppAndSystemHelper.denyPermission
26 import org.mozilla.fenix.helpers.AppAndSystemHelper.grantSystemPermission
27 import org.mozilla.fenix.helpers.AppAndSystemHelper.runWithCondition
28 import org.mozilla.fenix.helpers.AppAndSystemHelper.runWithSystemLocaleChanged
29 import org.mozilla.fenix.helpers.AppAndSystemHelper.verifyKeyboardVisibility
30 import org.mozilla.fenix.helpers.Constants.PackageName.ANDROID_SETTINGS
31 import org.mozilla.fenix.helpers.Constants.searchEngineCodes
32 import org.mozilla.fenix.helpers.HomeActivityTestRule
33 import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
34 import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
35 import org.mozilla.fenix.helpers.MockBrowserDataHelper.createBookmarkItem
36 import org.mozilla.fenix.helpers.MockBrowserDataHelper.createHistoryItem
37 import org.mozilla.fenix.helpers.MockBrowserDataHelper.createTabItem
38 import org.mozilla.fenix.helpers.MockBrowserDataHelper.setCustomSearchEngine
39 import org.mozilla.fenix.helpers.SearchDispatcher
40 import org.mozilla.fenix.helpers.TestAssetHelper.getGenericAsset
41 import org.mozilla.fenix.helpers.TestHelper.appContext
42 import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
43 import org.mozilla.fenix.helpers.TestHelper.exitMenu
44 import org.mozilla.fenix.helpers.TestHelper.longTapSelectItem
45 import org.mozilla.fenix.helpers.TestHelper.mDevice
46 import org.mozilla.fenix.helpers.TestHelper.verifySnackBarText
47 import org.mozilla.fenix.helpers.TestSetup
48 import org.mozilla.fenix.ui.robots.clickContextMenuItem
49 import org.mozilla.fenix.ui.robots.clickPageObject
50 import org.mozilla.fenix.ui.robots.homeScreen
51 import org.mozilla.fenix.ui.robots.longClickPageObject
52 import org.mozilla.fenix.ui.robots.multipleSelectionToolbar
53 import org.mozilla.fenix.ui.robots.navigationToolbar
54 import org.mozilla.fenix.ui.robots.searchScreen
55 import java.util.Locale
58 * Tests for verifying the search fragment
61 * - Verify the toolbar, awesomebar, and shortcut bar are displayed
62 * - Select shortcut button
63 * - Select scan button
67 class SearchTest : TestSetup() {
68 private lateinit var searchMockServer: MockWebServer
69 private var queryString = "firefox"
70 private val generalEnginesList = listOf("DuckDuckGo", "Google", "Bing")
71 private val topicEnginesList = listOf("Amazon.com", "Wikipedia", "eBay")
74 val activityTestRule = AndroidComposeTestRule(
76 skipOnboarding = true,
77 isPocketEnabled = false,
78 isJumpBackInCFREnabled = false,
79 isRecentTabsFeatureEnabled = false,
80 isTCPCFREnabled = false,
81 isWallpaperOnboardingEnabled = false,
82 tabsTrayRewriteEnabled = false,
87 override fun setUp() {
89 searchMockServer = MockWebServer().apply {
90 dispatcher = SearchDispatcher()
96 override fun tearDown() {
97 searchMockServer.shutdown()
100 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2154189
102 fun verifySearchBarItemsTest() {
104 verifyDefaultSearchEngine("Google")
105 verifySearchBarPlaceholder("Search or enter address")
107 verifyKeyboardVisibility(isExpectedToBeVisible = true)
108 verifyScanButtonVisibility(visible = true)
109 verifyVoiceSearchButtonVisibility(enabled = true)
110 verifySearchBarPlaceholder("Search or enter address")
111 typeSearch("mozilla ")
112 verifyScanButtonVisibility(visible = false)
113 verifyVoiceSearchButtonVisibility(enabled = true)
117 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2154190
119 fun verifySearchSelectorMenuItemsTest() {
123 verifySearchToolbar(isDisplayed = true)
124 clickSearchSelectorButton()
125 verifySearchShortcutListContains(
126 "DuckDuckGo", "Google", "Amazon.com", "Wikipedia", "Bing", "eBay",
127 "Bookmarks", "Tabs", "History", "Search settings",
132 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2154194
134 fun verifySearchPlaceholderForGeneralDefaultSearchEnginesTest() {
135 generalEnginesList.forEach {
138 clickSearchSelectorButton()
139 }.clickSearchEngineSettings {
140 openDefaultSearchEngineMenu()
141 changeDefaultSearchEngine(it)
145 verifySearchBarPlaceholder("Search or enter address")
150 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2154195
152 fun verifySearchPlaceholderForNotDefaultGeneralSearchEnginesTest() {
153 val generalEnginesList = listOf("DuckDuckGo", "Bing")
155 generalEnginesList.forEach {
158 clickSearchSelectorButton()
159 selectTemporarySearchMethod(it)
160 verifySearchBarPlaceholder("Search the web")
161 }.dismissSearchBar {}
165 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2154196
167 fun verifySearchPlaceholderForTopicSpecificSearchEnginesTest() {
168 val topicEnginesList = listOf("Amazon.com", "Wikipedia", "eBay")
170 topicEnginesList.forEach {
173 clickSearchSelectorButton()
174 selectTemporarySearchMethod(it)
175 verifySearchBarPlaceholder("Enter search terms")
176 }.dismissSearchBar {}
180 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1059459
183 fun verifyQRScanningCameraAccessDialogTest() {
184 val cameraManager = appContext.getSystemService(Context.CAMERA_SERVICE) as CameraManager
185 assumeTrue(cameraManager.cameraIdList.isNotEmpty())
192 clickDismissPermissionRequiredDialog()
197 clickGoToPermissionsSettings()
198 assertNativeAppOpens(ANDROID_SETTINGS)
202 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/235397
205 fun scanQRCodeToOpenAWebpageTest() {
206 val cameraManager = appContext.getSystemService(Context.CAMERA_SERVICE) as CameraManager
207 assumeTrue(cameraManager.cameraIdList.isNotEmpty())
212 grantSystemPermission()
217 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2154191
219 fun verifyScanButtonAvailableOnlyForGeneralSearchEnginesTest() {
220 generalEnginesList.forEach {
223 clickSearchSelectorButton()
224 selectTemporarySearchMethod(it)
225 verifyScanButtonVisibility(visible = true)
226 }.dismissSearchBar {}
229 topicEnginesList.forEach {
232 clickSearchSelectorButton()
233 selectTemporarySearchMethod(it)
234 verifyScanButtonVisibility(visible = false)
235 }.dismissSearchBar {}
239 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/235395
240 // Verifies a temporary change of search engine from the Search shortcut menu
243 fun searchEnginesCanBeChangedTemporarilyFromSearchSelectorMenuTest() {
244 val enginesList = listOf("DuckDuckGo", "Google", "Amazon.com", "Wikipedia", "Bing", "eBay")
246 enginesList.forEach {
249 clickSearchSelectorButton()
250 verifySearchShortcutListContains(it)
251 selectTemporarySearchMethod(it)
252 verifySearchEngineIcon(it)
253 }.submitQuery("mozilla ") {
259 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/233589
261 fun defaultSearchEnginesCanBeSetFromSearchSelectorMenuTest() {
263 clickSearchSelectorButton()
264 }.clickSearchEngineSettings {
265 verifyToolbarText("Search")
266 openDefaultSearchEngineMenu()
267 changeDefaultSearchEngine("DuckDuckGo")
272 }.submitQuery(queryString) {
273 verifyUrl(queryString)
277 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/522918
279 fun verifyClearSearchButtonTest() {
282 typeSearch(queryString)
284 verifySearchBarPlaceholder("Search or enter address")
288 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1623441
289 @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704")
292 fun searchResultsOpenedInNewTabsGenerateSearchGroupsTest() {
293 // setting our custom mockWebServer search URL
294 val searchEngineName = "TestSearchEngine"
295 setCustomSearchEngine(searchMockServer, searchEngineName)
297 // Performs a search and opens 2 dummy search results links to create a search group
300 }.submitQuery(queryString) {
301 longClickPageObject(itemWithText("Link 1"))
302 clickContextMenuItem("Open link in new tab")
303 clickSnackbarButton("SWITCH")
306 longClickPageObject(itemWithText("Link 2"))
307 clickContextMenuItem("Open link in new tab")
308 clickSnackbarButton("SWITCH")
311 }.openTabsListThreeDotMenu {
313 verifyRecentlyVisitedSearchGroupDisplayed(shouldBeDisplayed = true, searchTerm = queryString, groupSize = 3)
317 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1592229
318 @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704")
320 fun verifyAPageIsAddedToASearchGroupOnlyOnceTest() {
321 val firstPageUrl = getGenericAsset(searchMockServer, 1).url
322 val secondPageUrl = getGenericAsset(searchMockServer, 2).url
324 "http://localhost:${searchMockServer.port}/pages/searchResults.html?search=test%20search".toUri()
325 // setting our custom mockWebServer search URL
326 val searchEngineName = "TestSearchEngine"
327 setCustomSearchEngine(searchMockServer, searchEngineName)
329 // Performs a search and opens 2 dummy search results links to create a search group
332 }.submitQuery(queryString) {
333 longClickPageObject(itemWithText("Link 1"))
334 clickContextMenuItem("Open link in new tab")
335 clickSnackbarButton("SWITCH")
338 longClickPageObject(itemWithText("Link 1"))
339 clickContextMenuItem("Open link in new tab")
340 clickSnackbarButton("SWITCH")
343 longClickPageObject(itemWithText("Link 2"))
344 clickContextMenuItem("Open link in new tab")
345 clickSnackbarButton("SWITCH")
348 longClickPageObject(itemWithText("Link 1"))
349 clickContextMenuItem("Open link in new tab")
350 clickSnackbarButton("SWITCH")
353 }.openTabsListThreeDotMenu {
355 verifyRecentlyVisitedSearchGroupDisplayed(shouldBeDisplayed = true, searchTerm = queryString, groupSize = 3)
356 }.openRecentlyVisitedSearchGroupHistoryList(queryString) {
357 verifyTestPageUrl(firstPageUrl)
358 verifyTestPageUrl(secondPageUrl)
359 verifyTestPageUrl(originPageUrl)
363 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1591782
364 @Ignore("Failing due to known bug, see https://github.com/mozilla-mobile/fenix/issues/23818")
366 fun searchGroupIsGeneratedWhenNavigatingInTheSameTabTest() {
367 // setting our custom mockWebServer search URL
368 val searchEngineName = "TestSearchEngine"
369 setCustomSearchEngine(searchMockServer, searchEngineName)
371 // Performs a search and opens 2 dummy search results links to create a search group
374 }.submitQuery(queryString) {
375 clickPageObject(itemContainingText("Link 1"))
378 clickPageObject(itemContainingText("Link 2"))
381 }.openTabsListThreeDotMenu {
383 verifyRecentlyVisitedSearchGroupDisplayed(shouldBeDisplayed = true, searchTerm = queryString, groupSize = 3)
387 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1591781
390 fun searchGroupIsNotGeneratedForLinksOpenedInPrivateTabsTest() {
391 // setting our custom mockWebServer search URL
392 val searchEngineName = "TestSearchEngine"
393 setCustomSearchEngine(searchMockServer, searchEngineName)
395 // Performs a search and opens 2 dummy search results links to create a search group
398 }.submitQuery(queryString) {
399 longClickPageObject(itemWithText("Link 1"))
400 clickContextMenuItem("Open link in private tab")
401 longClickPageObject(itemWithText("Link 2"))
402 clickContextMenuItem("Open link in private tab")
404 }.toggleToPrivateTabs {
405 }.openTabWithIndex(0) {
407 }.openTabWithIndex(1) {
409 }.openTabsListThreeDotMenu {
411 togglePrivateBrowsingModeOnOff()
412 verifyRecentlyVisitedSearchGroupDisplayed(shouldBeDisplayed = false, searchTerm = queryString, groupSize = 3)
415 verifyHistoryItemExists(shouldExist = false, item = "3 sites")
419 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1592269
420 @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704")
423 fun deleteIndividualHistoryItemsFromSearchGroupTest() {
424 val firstPageUrl = getGenericAsset(searchMockServer, 1).url
425 val secondPageUrl = getGenericAsset(searchMockServer, 2).url
426 // setting our custom mockWebServer search URL
427 val searchEngineName = "TestSearchEngine"
428 setCustomSearchEngine(searchMockServer, searchEngineName)
430 // Performs a search and opens 2 dummy search results links to create a search group
433 }.submitQuery(queryString) {
434 longClickPageObject(itemWithText("Link 1"))
435 clickContextMenuItem("Open link in new tab")
436 clickSnackbarButton("SWITCH")
439 longClickPageObject(itemWithText("Link 2"))
440 clickContextMenuItem("Open link in new tab")
441 clickSnackbarButton("SWITCH")
444 }.openTabsListThreeDotMenu {
446 verifyRecentlyVisitedSearchGroupDisplayed(shouldBeDisplayed = true, searchTerm = queryString, groupSize = 3)
447 }.openRecentlyVisitedSearchGroupHistoryList(queryString) {
448 clickDeleteHistoryButton(firstPageUrl.toString())
449 longTapSelectItem(secondPageUrl)
450 multipleSelectionToolbar {
451 openActionBarOverflowOrOptionsMenu(activityTestRule.activity)
452 clickMultiSelectionDelete()
457 // checking that the group is removed when only 1 item is left
458 verifyRecentlyVisitedSearchGroupDisplayed(shouldBeDisplayed = false, searchTerm = queryString, groupSize = 1)
462 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1592242
463 @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704")
465 fun deleteSearchGroupFromHomeScreenTest() {
466 val firstPageUrl = getGenericAsset(searchMockServer, 1).url
467 // setting our custom mockWebServer search URL
468 val searchEngineName = "TestSearchEngine"
469 setCustomSearchEngine(searchMockServer, searchEngineName)
471 // Performs a search and opens 2 dummy search results links to create a search group
474 }.submitQuery(queryString) {
475 longClickPageObject(itemWithText("Link 1"))
476 clickContextMenuItem("Open link in new tab")
477 clickSnackbarButton("SWITCH")
480 longClickPageObject(itemWithText("Link 2"))
481 clickContextMenuItem("Open link in new tab")
482 clickSnackbarButton("SWITCH")
485 }.openTabsListThreeDotMenu {
487 verifyRecentlyVisitedSearchGroupDisplayed(shouldBeDisplayed = true, searchTerm = queryString, groupSize = 3)
488 }.openRecentlyVisitedSearchGroupHistoryList(queryString) {
489 clickDeleteAllHistoryButton()
490 confirmDeleteAllHistory()
491 verifySnackBarText("Group deleted")
492 verifyHistoryItemExists(shouldExist = false, firstPageUrl.toString())
495 verifyRecentlyVisitedSearchGroupDisplayed(shouldBeDisplayed = false, queryString, groupSize = 3)
498 verifySearchGroupDisplayed(shouldBeDisplayed = false, queryString, groupSize = 3)
499 verifyEmptyHistoryView()
503 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1592235
504 @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704")
506 fun openAPageFromHomeScreenSearchGroupTest() {
507 val firstPageUrl = getGenericAsset(searchMockServer, 1).url
508 val secondPageUrl = getGenericAsset(searchMockServer, 2).url
509 // setting our custom mockWebServer search URL
510 val searchEngineName = "TestSearchEngine"
511 setCustomSearchEngine(searchMockServer, searchEngineName)
513 // Performs a search and opens 2 dummy search results links to create a search group
516 }.submitQuery(queryString) {
517 longClickPageObject(itemWithText("Link 1"))
518 clickContextMenuItem("Open link in new tab")
519 clickSnackbarButton("SWITCH")
522 longClickPageObject(itemWithText("Link 2"))
523 clickContextMenuItem("Open link in new tab")
524 clickSnackbarButton("SWITCH")
527 }.openTabsListThreeDotMenu {
529 verifyRecentlyVisitedSearchGroupDisplayed(shouldBeDisplayed = true, searchTerm = queryString, groupSize = 3)
530 }.openRecentlyVisitedSearchGroupHistoryList(queryString) {
531 }.openWebsite(firstPageUrl) {
532 verifyUrl(firstPageUrl.toString())
534 }.openRecentlyVisitedSearchGroupHistoryList(queryString) {
535 longTapSelectItem(firstPageUrl)
536 longTapSelectItem(secondPageUrl)
537 openActionBarOverflowOrOptionsMenu(activityTestRule.activity)
540 multipleSelectionToolbar {
542 verifyNormalModeSelected()
544 openActionBarOverflowOrOptionsMenu(activityTestRule.activity)
545 multipleSelectionToolbar {
546 }.clickOpenPrivateTab {
547 verifyPrivateModeSelected()
551 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1592238
552 @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704")
554 fun shareAPageFromHomeScreenSearchGroupTest() {
555 val firstPageUrl = getGenericAsset(searchMockServer, 1).url
556 // setting our custom mockWebServer search URL
557 val searchEngineName = "TestSearchEngine"
558 setCustomSearchEngine(searchMockServer, searchEngineName)
560 // Performs a search and opens 2 dummy search results links to create a search group
563 }.submitQuery(queryString) {
564 longClickPageObject(itemWithText("Link 1"))
565 clickContextMenuItem("Open link in new tab")
566 clickSnackbarButton("SWITCH")
569 longClickPageObject(itemWithText("Link 2"))
570 clickContextMenuItem("Open link in new tab")
571 clickSnackbarButton("SWITCH")
574 }.openTabsListThreeDotMenu {
576 verifyRecentlyVisitedSearchGroupDisplayed(shouldBeDisplayed = true, searchTerm = queryString, groupSize = 3)
577 }.openRecentlyVisitedSearchGroupHistoryList(queryString) {
578 longTapSelectItem(firstPageUrl)
581 multipleSelectionToolbar {
582 clickShareHistoryButton()
584 verifyShareTabFavicon()
585 verifyShareTabTitle()
590 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1232633
591 // Default search code for Google-US
593 fun defaultSearchCodeGoogleUS() {
596 }.submitQuery(queryString) {
600 // Full URL no longer visible in the nav bar, so we'll check the history record
601 // A search group is sometimes created when searching with Google (probably redirects)
603 verifyHistoryItemExists(shouldExist = true, searchEngineCodes["Google"]!!)
604 } catch (e: AssertionError) {
605 openSearchGroup(queryString)
606 verifyHistoryItemExists(shouldExist = true, searchEngineCodes["Google"]!!)
611 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1232637
612 // Default search code for Bing-US
614 fun defaultSearchCodeBingUS() {
618 }.openSearchSubMenu {
619 openDefaultSearchEngineMenu()
620 changeDefaultSearchEngine("Bing")
626 }.submitQuery(queryString) {
630 // Full URL no longer visible in the nav bar, so we'll check the history record
631 // A search group is sometimes created when searching with Bing (probably redirects)
633 verifyHistoryItemExists(shouldExist = true, searchEngineCodes["Bing"]!!)
634 } catch (e: AssertionError) {
635 openSearchGroup(queryString)
636 verifyHistoryItemExists(shouldExist = true, searchEngineCodes["Bing"]!!)
641 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1232638
642 // Default search code for DuckDuckGo-US
644 fun defaultSearchCodeDuckDuckGoUS() {
648 }.openSearchSubMenu {
649 openDefaultSearchEngineMenu()
650 changeDefaultSearchEngine("DuckDuckGo")
655 }.submitQuery(queryString) {
659 // Full URL no longer visible in the nav bar, so we'll check the history record
660 // A search group is sometimes created when searching with DuckDuckGo
662 verifyHistoryItemExists(shouldExist = true, item = searchEngineCodes["DuckDuckGo"]!!)
663 } catch (e: AssertionError) {
664 openSearchGroup(queryString)
665 verifyHistoryItemExists(shouldExist = true, item = searchEngineCodes["DuckDuckGo"]!!)
670 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2154215
673 fun verifyHistorySearchWithBrowsingHistoryTest() {
674 val firstPageUrl = getGenericAsset(searchMockServer, 1)
675 val secondPageUrl = getGenericAsset(searchMockServer, 2)
677 createHistoryItem(firstPageUrl.url.toString())
678 createHistoryItem(secondPageUrl.url.toString())
682 clickSearchSelectorButton()
683 selectTemporarySearchMethod(searchEngineName = "History")
684 typeSearch(searchTerm = "Mozilla")
685 verifySuggestionsAreNotDisplayed(rule = activityTestRule, "Mozilla")
687 typeSearch(searchTerm = "generic")
688 verifyTypedToolbarText("generic")
689 verifySearchEngineSuggestionResults(
690 rule = activityTestRule,
691 searchSuggestions = arrayOf(
692 firstPageUrl.url.toString(),
693 secondPageUrl.url.toString(),
695 searchTerm = "generic",
697 }.clickSearchSuggestion(firstPageUrl.url.toString()) {
698 verifyUrl(firstPageUrl.url.toString())
704 fun verifySearchTabsWithOpenTabsTest() {
706 // This test will run only on Beta and RC builds
707 // The new composable tabs tray is only available in Nightly and Debug.
708 activityTestRule.activity.components.core.engine.version.releaseChannel == EngineReleaseChannel.RELEASE ||
709 activityTestRule.activity.components.core.engine.version.releaseChannel == EngineReleaseChannel.BETA,
711 val firstPageUrl = getGenericAsset(searchMockServer, 1)
712 val secondPageUrl = getGenericAsset(searchMockServer, 2)
714 createTabItem(firstPageUrl.url.toString())
715 createTabItem(secondPageUrl.url.toString())
719 clickSearchSelectorButton()
720 selectTemporarySearchMethod(searchEngineName = "Tabs")
721 typeSearch(searchTerm = "Mozilla")
722 verifySuggestionsAreNotDisplayed(rule = activityTestRule, "Mozilla")
724 typeSearch(searchTerm = "generic")
725 verifyTypedToolbarText("generic")
726 verifySearchEngineSuggestionResults(
727 rule = activityTestRule,
728 searchSuggestions = arrayOf(
730 firstPageUrl.url.toString(),
731 secondPageUrl.url.toString(),
733 searchTerm = "generic",
735 }.clickSearchSuggestion(firstPageUrl.url.toString()) {
736 verifyTabCounter("2")
738 verifyOpenTabsOrder(position = 1, title = firstPageUrl.url.toString())
739 verifyOpenTabsOrder(position = 2, title = secondPageUrl.url.toString())
744 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2230212
747 fun searchHistoryNotRememberedInPrivateBrowsingTest() {
748 appContext.settings().shouldShowSearchSuggestionsInPrivate = true
750 val firstPageUrl = getGenericAsset(searchMockServer, 1)
751 val searchEngineName = "TestSearchEngine"
753 setCustomSearchEngine(searchMockServer, searchEngineName)
754 createBookmarkItem(firstPageUrl.url.toString(), firstPageUrl.title, 1u)
757 }.openNavigationToolbar {
759 }.submitQuery("test page 1") {
761 }.togglePrivateBrowsingMode()
764 }.openNavigationToolbar {
766 }.submitQuery("test page 2") {
767 }.openNavigationToolbar {
769 typeSearch(searchTerm = "test page")
770 verifySearchEngineSuggestionResults(
771 rule = activityTestRule,
772 searchSuggestions = arrayOf(
773 "TestSearchEngine search",
776 firstPageUrl.url.toString(),
778 searchTerm = "test page 1",
780 // 2 search engine suggestions and 2 browser suggestions (1 history, 1 bookmark)
781 verifySearchSuggestionsCount(activityTestRule, numberOfSuggestions = 4, searchTerm = "test page")
782 verifySuggestionsAreNotDisplayed(
784 searchSuggestions = arrayOf(
791 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1232631
792 // Expected for app language set to Arabic
794 fun verifySearchEnginesFunctionalityUsingRTLLocaleTest() {
795 val arabicLocale = Locale("ar", "AR")
797 runWithSystemLocaleChanged(arabicLocale, activityTestRule.activityRule) {
800 verifyTranslatedFocusedNavigationToolbar("ابحث أو أدخِل عنوانا")
801 clickSearchSelectorButton()
802 verifySearchShortcutListContains(
809 selectTemporarySearchMethod("ويكيبيديا (ar)")
810 }.submitQuery("firefox") {