From 9783930ac543347df12749f10c95aa7a2e310609 Mon Sep 17 00:00:00 2001 From: Oana Horvath Date: Wed, 3 Feb 2021 17:32:45 +0200 Subject: [PATCH] For #16615: UI smoke test customTrackingProtectionSettingsTest --- .../assets/pages/trackingPage.html | 66 +++++++++++++++++++ .../java/org/mozilla/fenix/ui/SmokeTest.kt | 31 ++++++++- .../StrictEnhancedTrackingProtectionTest.kt | 4 +- .../robots/EnhancedTrackingProtectionRobot.kt | 57 ++++++++++++++++ ...sSubMenuEnhancedTrackingProtectionRobot.kt | 39 +++++++++-- 5 files changed, 189 insertions(+), 8 deletions(-) diff --git a/app/src/androidTest/assets/pages/trackingPage.html b/app/src/androidTest/assets/pages/trackingPage.html index 1a0d735a6..a0a53c954 100644 --- a/app/src/androidTest/assets/pages/trackingPage.html +++ b/app/src/androidTest/assets/pages/trackingPage.html @@ -9,5 +9,71 @@ + +

Level 1 (Basic) List

+

social-track-digest256:

+ +
+

ads-track-digest256:

+ +
+

analytics-track-digest256:

+ +
+

Fingerprinting: +

test not run
+ +

+
+

Cryptomining: + not blocked +

+ +

Cookie blocking +

+ + + +

+ * Facebook-cookies


+    * LinkedIn-cookies 

+    * Twitter-cookies 

+    

+ + diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt index 10b38c0ad..20f34e422 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -28,6 +28,7 @@ import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource import org.mozilla.fenix.ui.robots.browserScreen import org.mozilla.fenix.ui.robots.clickTabCrashedRestoreButton import org.mozilla.fenix.ui.robots.clickUrlbar +import org.mozilla.fenix.ui.robots.dismissTrackingOnboarding import org.mozilla.fenix.ui.robots.downloadRobot import org.mozilla.fenix.ui.robots.enhancedTrackingProtection import org.mozilla.fenix.ui.robots.homeScreen @@ -372,7 +373,7 @@ class SmokeTest { }.openThreeDotMenu { }.openSettings { }.openEnhancedTrackingProtectionSubMenu { - clickEnhancedTrackingProtectionDefaults() + switchEnhancedTrackingProtectionToggle() verifyEnhancedTrackingProtectionOptionsGrayedOut() }.goBackToHomeScreen { navigationToolbar { @@ -381,7 +382,7 @@ class SmokeTest { }.openThreeDotMenu { }.openSettings { }.openEnhancedTrackingProtectionSubMenu { - clickEnhancedTrackingProtectionDefaults() + switchEnhancedTrackingProtectionToggle() }.goBack { }.goBackToBrowser { clickEnhancedTrackingProtectionPanel() @@ -391,6 +392,32 @@ class SmokeTest { } } + @Test + fun customTrackingProtectionSettingsTest() { + val trackingPage = TestAssetHelper.getEnhancedTrackingProtectionAsset(mockWebServer) + + homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openEnhancedTrackingProtectionSubMenu { + verifyEnhancedTrackingProtectionOptions() + selectTrackingProtectionOption("Custom") + verifyCustomTrackingProtectionSettings() + }.goBackToHomeScreen {} + + navigationToolbar { + }.enterURLAndEnterToBrowser(trackingPage.url) {} + + enhancedTrackingProtection { + dismissTrackingOnboarding() + }.openEnhancedTrackingProtectionSheet { + verifyTrackingCookiesBlocked() + verifyCryptominersBlocked() + verifyFingerprintersBlocked() + verifyBasicLevelTrackingContentBlocked() + } + } + @Test // Verifies changing the default engine from the Search Shortcut menu fun verifySearchEngineCanBeChangedTemporarilyUsingShortcuts() { diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/StrictEnhancedTrackingProtectionTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/StrictEnhancedTrackingProtectionTest.kt index 659f7547e..2107f9d10 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/StrictEnhancedTrackingProtectionTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/StrictEnhancedTrackingProtectionTest.kt @@ -70,7 +70,7 @@ class StrictEnhancedTrackingProtectionTest { }.openEnhancedTrackingProtectionSubMenu { verifyEnhancedTrackingProtectionHeader() verifyEnhancedTrackingProtectionOptions() - verifyEnhancedTrackingProtectionDefaults() + verifyTrackingProtectionSwitchEnabled() }.openExceptions { verifyDefault() } @@ -177,7 +177,7 @@ class StrictEnhancedTrackingProtectionTest { }.openProtectionSettings { verifyEnhancedTrackingProtectionHeader() verifyEnhancedTrackingProtectionOptions() - verifyEnhancedTrackingProtectionDefaults() + verifyTrackingProtectionSwitchEnabled() } settingsSubMenuEnhancedTrackingProtection { diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/EnhancedTrackingProtectionRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/EnhancedTrackingProtectionRobot.kt index aa6adc18a..5fb906ad7 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/EnhancedTrackingProtectionRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/EnhancedTrackingProtectionRobot.kt @@ -8,13 +8,20 @@ package org.mozilla.fenix.ui.robots import androidx.test.espresso.Espresso.onView import androidx.test.espresso.assertion.ViewAssertions +import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.By import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.UiSelector import androidx.test.uiautomator.Until +import org.hamcrest.Matchers.containsString import org.mozilla.fenix.R import org.mozilla.fenix.helpers.TestAssetHelper +import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime import org.mozilla.fenix.helpers.TestHelper.packageName import org.mozilla.fenix.helpers.click import org.mozilla.fenix.helpers.ext.waitNotNull @@ -37,6 +44,14 @@ class EnhancedTrackingProtectionRobot { fun verifyEnhancedTrackingProtectionDetailsStatus(status: String) = assertEnhancedTrackingProtectionDetailsStatus(status) + fun verifyTrackingCookiesBlocked() = assertTrackingCookiesBlocked() + + fun verifyFingerprintersBlocked() = assertFingerprintersBlocked() + + fun verifyCryptominersBlocked() = assertCryptominersBlocked() + + fun verifyBasicLevelTrackingContentBlocked() = assertBasicLevelTrackingContentBlocked() + class Transition { fun openEnhancedTrackingProtectionSheet(interact: EnhancedTrackingProtectionRobot.() -> Unit): Transition { openEnhancedTrackingProtectionSheet().click() @@ -129,3 +144,45 @@ private fun openEnhancedTrackingProtectionSettings() = private fun openEnhancedTrackingProtectionDetails() = onView(ViewMatchers.withId(R.id.tracking_content)) + +private fun assertTrackingCookiesBlocked() { + mDevice.findObject(UiSelector().resourceId("$packageName:id/cross_site_tracking")) + .waitForExists(waitingTime) + onView(withId(R.id.blocking_header)).check(matches(isDisplayed())) + onView(withId(R.id.cross_site_tracking)).check(matches(isDisplayed())) +} + +private fun assertFingerprintersBlocked() { + mDevice.findObject(UiSelector().resourceId("$packageName:id/fingerprinters")) + .waitForExists(waitingTime) + onView(withId(R.id.blocking_header)).check(matches(isDisplayed())) + onView(withId(R.id.fingerprinters)).check(matches(isDisplayed())) +} + +private fun assertCryptominersBlocked() { + mDevice.findObject(UiSelector().resourceId("$packageName:id/cryptominers")) + .waitForExists(waitingTime) + onView(withId(R.id.blocking_header)).check(matches(isDisplayed())) + onView(withId(R.id.cryptominers)).check(matches(isDisplayed())) +} + +private fun assertBasicLevelTrackingContentBlocked() { + mDevice.findObject(UiSelector().resourceId("$packageName:id/tracking_content")) + .waitForExists(waitingTime) + + onView(withId(R.id.tracking_content)) + .check(matches(isDisplayed())) + .click() + onView(withId(R.id.blocking_text_list)) + .check( + matches( + withText( + containsString( + "social-track-digest256.dummytracker.org\n" + + "ads-track-digest256.dummytracker.org\n" + + "analytics-track-digest256.dummytracker.org" + ) + ) + ) + ) +} diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuEnhancedTrackingProtectionRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuEnhancedTrackingProtectionRobot.kt index 340699e58..14e7b0a8e 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuEnhancedTrackingProtectionRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuEnhancedTrackingProtectionRobot.kt @@ -13,6 +13,7 @@ import androidx.test.espresso.contrib.RecyclerViewActions import androidx.test.espresso.matcher.ViewMatchers.hasDescendant import androidx.test.espresso.matcher.ViewMatchers.hasSibling import androidx.test.espresso.matcher.ViewMatchers.Visibility +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withChild import androidx.test.espresso.matcher.ViewMatchers.withContentDescription import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility @@ -25,6 +26,7 @@ import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice import org.hamcrest.CoreMatchers.allOf import org.hamcrest.CoreMatchers.not +import org.mozilla.fenix.helpers.TestHelper.scrollToElementByText import org.mozilla.fenix.helpers.assertIsChecked import org.mozilla.fenix.helpers.click import org.mozilla.fenix.helpers.isChecked @@ -49,9 +51,9 @@ class SettingsSubMenuEnhancedTrackingProtectionRobot { fun verifyEnhancedTrackingProtectionOptionsGrayedOut() = assertEnhancedTrackingProtectionOptionsGrayedOut() - fun verifyEnhancedTrackingProtectionDefaults() = assertEnhancedTrackingProtectionDefaults() + fun verifyTrackingProtectionSwitchEnabled() = assertTrackingProtectionSwitchEnabled() - fun clickEnhancedTrackingProtectionDefaults() = onView(withResourceName("switch_widget")).click() + fun switchEnhancedTrackingProtectionToggle() = onView(withResourceName("switch_widget")).click() fun verifyRadioButtonDefaults() = assertRadioButtonDefaults() @@ -60,11 +62,15 @@ class SettingsSubMenuEnhancedTrackingProtectionRobot { verifyEnhancedTrackingProtectionHeaderDescription() verifyLearnMoreText() verifyEnhancedTrackingProtectionTextWithSwitchWidget() - verifyEnhancedTrackingProtectionDefaults() + verifyTrackingProtectionSwitchEnabled() verifyRadioButtonDefaults() verifyEnhancedTrackingProtectionOptions() } + fun verifyCustomTrackingProtectionSettings() = assertCustomTrackingProtectionSettings() + + fun selectTrackingProtectionOption(option: String) = onView(withText(option)).click() + class Transition { val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())!! @@ -183,7 +189,7 @@ private fun assertEnhancedTrackingProtectionOptionsGrayedOut() { .check(matches(not(isEnabled(true)))) } -private fun assertEnhancedTrackingProtectionDefaults() { +private fun assertTrackingProtectionSwitchEnabled() { onView(withResourceName("switch_widget")).check( matches( isChecked( @@ -218,3 +224,28 @@ private fun goBackButton() = private fun openExceptions() = onView(allOf(withText("Exceptions"))) + +private fun assertCustomTrackingProtectionSettings() { + scrollToElementByText("Redirect Trackers") + cookiesCheckbox().check(matches(isDisplayed())) + cookiesDropDownMenuDefault().check(matches(isDisplayed())) + trackingContentCheckbox().check(matches(isDisplayed())) + trackingcontentDropDownDefault().check(matches(isDisplayed())) + cryptominersCheckbox().check(matches(isDisplayed())) + fingerprintersCheckbox().check(matches(isDisplayed())) + redirectTrackersCheckbox().check(matches(isDisplayed())) +} + +private fun cookiesCheckbox() = onView(withText("Cookies")) + +private fun cookiesDropDownMenuDefault() = onView(withText("All cookies (will cause websites to break)")) + +private fun trackingContentCheckbox() = onView(withText("Tracking content")) + +private fun trackingcontentDropDownDefault() = onView(withText("In all tabs")) + +private fun cryptominersCheckbox() = onView(withText("Cryptominers")) + +private fun fingerprintersCheckbox() = onView(withText("Fingerprinters")) + +private fun redirectTrackersCheckbox() = onView(withText("Redirect Trackers"))