Bug 1879288 - Add missing pairs of logs to BrowserRobot

fenix/124.1.0
AndiAJ 4 months ago committed by mergify[bot]
parent 95b74cd8c6
commit 5ad9a003a6

@ -71,6 +71,7 @@ class BrowserRobot {
fun verifyCurrentPrivateSession(context: Context) { fun verifyCurrentPrivateSession(context: Context) {
val selectedTab = context.components.core.store.state.selectedTab val selectedTab = context.components.core.store.state.selectedTab
Log.i(TAG, "verifyCurrentPrivateSession: Trying to verify that current browsing session is private")
assertTrue("Current session is private", selectedTab?.content?.private ?: false) assertTrue("Current session is private", selectedTab?.content?.private ?: false)
Log.i(TAG, "verifyCurrentPrivateSession: Verified that current browsing session is private") Log.i(TAG, "verifyCurrentPrivateSession: Verified that current browsing session is private")
} }
@ -228,6 +229,7 @@ class BrowserRobot {
fun verifyNavURLBarHidden() = assertUIObjectIsGone(navURLBar()) fun verifyNavURLBarHidden() = assertUIObjectIsGone(navURLBar())
fun verifyMenuButton() { fun verifyMenuButton() {
Log.i(TAG, "verifyMenuButton: Trying to verify main menu button is displayed")
threeDotButton().check(matches(isDisplayed())) threeDotButton().check(matches(isDisplayed()))
Log.i(TAG, "verifyMenuButton: Verified main menu button is displayed") Log.i(TAG, "verifyMenuButton: Verified main menu button is displayed")
} }
@ -249,6 +251,7 @@ class BrowserRobot {
assertUIObjectExists(itemWithResId("$packageName:id/notification_dot")) assertUIObjectExists(itemWithResId("$packageName:id/notification_dot"))
fun dismissContentContextMenu() { fun dismissContentContextMenu() {
Log.i(TAG, "dismissContentContextMenu: Trying to click device back button")
mDevice.pressBack() mDevice.pressBack()
Log.i(TAG, "dismissContentContextMenu: Clicked device back button") Log.i(TAG, "dismissContentContextMenu: Clicked device back button")
assertUIObjectExists(itemWithResId("$packageName:id/engineView")) assertUIObjectExists(itemWithResId("$packageName:id/engineView"))
@ -280,7 +283,9 @@ class BrowserRobot {
fun clickSubmitLoginButton() { fun clickSubmitLoginButton() {
clickPageObject(itemWithResId("submit")) clickPageObject(itemWithResId("submit"))
assertUIObjectIsGone(itemWithResId("submit")) assertUIObjectIsGone(itemWithResId("submit"))
Log.i(TAG, "clickSubmitLoginButton: Waiting for device to be idle for $waitingTimeLong ms")
mDevice.waitForIdle(waitingTimeLong) mDevice.waitForIdle(waitingTimeLong)
Log.i(TAG, "clickSubmitLoginButton: Waited for device to be idle for $waitingTimeLong ms")
} }
fun enterPassword(password: String) { fun enterPassword(password: String) {
@ -323,11 +328,13 @@ class BrowserRobot {
// failing to swipe on Firebase sometimes, so it tries again // failing to swipe on Firebase sometimes, so it tries again
try { try {
Log.i(TAG, "swipeNavBarRight: Try block") Log.i(TAG, "swipeNavBarRight: Try block")
Log.i(TAG, "swipeNavBarRight: Trying to perform swipe right action on navigation toolbar")
navURLBar().swipeRight(2) navURLBar().swipeRight(2)
Log.i(TAG, "swipeNavBarRight: Performed swipe right action on navigation toolbar") Log.i(TAG, "swipeNavBarRight: Performed swipe right action on navigation toolbar")
assertUIObjectIsGone(itemWithText(tabUrl)) assertUIObjectIsGone(itemWithText(tabUrl))
} catch (e: AssertionError) { } catch (e: AssertionError) {
Log.i(TAG, "swipeNavBarRight: AssertionError caught, executing fallback methods") Log.i(TAG, "swipeNavBarRight: AssertionError caught, executing fallback methods")
Log.i(TAG, "swipeNavBarRight: Trying to perform swipe right action on navigation toolbar")
navURLBar().swipeRight(2) navURLBar().swipeRight(2)
Log.i(TAG, "swipeNavBarRight: Performed swipe right action on navigation toolbar") Log.i(TAG, "swipeNavBarRight: Performed swipe right action on navigation toolbar")
assertUIObjectIsGone(itemWithText(tabUrl)) assertUIObjectIsGone(itemWithText(tabUrl))
@ -338,11 +345,13 @@ class BrowserRobot {
// failing to swipe on Firebase sometimes, so it tries again // failing to swipe on Firebase sometimes, so it tries again
try { try {
Log.i(TAG, "swipeNavBarLeft: Try block") Log.i(TAG, "swipeNavBarLeft: Try block")
Log.i(TAG, "swipeNavBarLeft: Trying to perform swipe left action on navigation toolbar")
navURLBar().swipeLeft(2) navURLBar().swipeLeft(2)
Log.i(TAG, "swipeNavBarLeft: Performed swipe left action on navigation toolbar") Log.i(TAG, "swipeNavBarLeft: Performed swipe left action on navigation toolbar")
assertUIObjectIsGone(itemWithText(tabUrl)) assertUIObjectIsGone(itemWithText(tabUrl))
} catch (e: AssertionError) { } catch (e: AssertionError) {
Log.i(TAG, "swipeNavBarLeft: AssertionError caught, executing fallback methods") Log.i(TAG, "swipeNavBarLeft: AssertionError caught, executing fallback methods")
Log.i(TAG, "swipeNavBarLeft: Trying to perform swipe left action on navigation toolbar")
navURLBar().swipeLeft(2) navURLBar().swipeLeft(2)
Log.i(TAG, "swipeNavBarLeft: Performed swipe left action on navigation toolbar") Log.i(TAG, "swipeNavBarLeft: Performed swipe left action on navigation toolbar")
assertUIObjectIsGone(itemWithText(tabUrl)) assertUIObjectIsGone(itemWithText(tabUrl))
@ -354,6 +363,7 @@ class BrowserRobot {
try { try {
Log.i(TAG, "clickSuggestedLoginsButton: Started try #$i") Log.i(TAG, "clickSuggestedLoginsButton: Started try #$i")
mDevice.waitForObjects(suggestedLogins()) mDevice.waitForObjects(suggestedLogins())
Log.i(TAG, "clickSuggestedLoginsButton: Trying to click suggested logins button")
suggestedLogins().click() suggestedLogins().click()
Log.i(TAG, "clickSuggestedLoginsButton: Clicked suggested logins button") Log.i(TAG, "clickSuggestedLoginsButton: Clicked suggested logins button")
mDevice.waitForObjects(suggestedLogins()) mDevice.waitForObjects(suggestedLogins())
@ -370,6 +380,7 @@ class BrowserRobot {
} }
fun setTextForApartmentTextBox(apartment: String) { fun setTextForApartmentTextBox(apartment: String) {
Log.i(TAG, "setTextForApartmentTextBox: Trying to set the text for the apartment text box to: $apartment")
itemWithResId("apartment").setText(apartment) itemWithResId("apartment").setText(apartment)
Log.i(TAG, "setTextForApartmentTextBox: The text for the apartment text box was set to: $apartment") Log.i(TAG, "setTextForApartmentTextBox: The text for the apartment text box was set to: $apartment")
} }
@ -388,8 +399,9 @@ class BrowserRobot {
try { try {
Log.i(TAG, "clickSelectAddressButton: Started try #$i") Log.i(TAG, "clickSelectAddressButton: Started try #$i")
assertUIObjectExists(selectAddressButton()) assertUIObjectExists(selectAddressButton())
Log.i(TAG, "clickSelectAddressButton: Trying to click the select address button and wait for $waitingTime ms for a new window")
selectAddressButton().clickAndWaitForNewWindow(waitingTime) selectAddressButton().clickAndWaitForNewWindow(waitingTime)
Log.i(TAG, "clickSelectAddressButton: Clicked select address button") Log.i(TAG, "clickSelectAddressButton: Clicked the select address button and waited for $waitingTime ms for a new window")
break break
} catch (e: AssertionError) { } catch (e: AssertionError) {
@ -409,37 +421,51 @@ class BrowserRobot {
fun verifySelectAddressButtonExists(exists: Boolean) = assertUIObjectExists(selectAddressButton(), exists = exists) fun verifySelectAddressButtonExists(exists: Boolean) = assertUIObjectExists(selectAddressButton(), exists = exists)
fun changeCreditCardExpiryDate(expiryDate: String) { fun changeCreditCardExpiryDate(expiryDate: String) {
Log.i(TAG, "changeCreditCardExpiryDate: Trying to set credit card expiry date to: $expiryDate")
itemWithResId("expiryMonthAndYear").setText(expiryDate) itemWithResId("expiryMonthAndYear").setText(expiryDate)
Log.i(TAG, "changeCreditCardExpiryDate: Credit card expiry date was set to: $expiryDate") Log.i(TAG, "changeCreditCardExpiryDate: Credit card expiry date was set to: $expiryDate")
} }
fun clickCreditCardNumberTextBox() { fun clickCreditCardNumberTextBox() {
Log.i(TAG, "clickCreditCardNumberTextBox: Waiting for credit card number text box") Log.i(TAG, "clickCreditCardNumberTextBox: Waiting for $waitingTime ms until finding the credit card number text box")
mDevice.wait(Until.findObject(By.res("cardNumber")), waitingTime) mDevice.wait(Until.findObject(By.res("cardNumber")), waitingTime)
Log.i(TAG, "clickCreditCardNumberTextBox: Waited for $waitingTime ms until the credit card number text box was found")
Log.i(TAG, "clickCreditCardNumberTextBox: Trying to click the credit card number text box")
mDevice.findObject(By.res("cardNumber")).click() mDevice.findObject(By.res("cardNumber")).click()
Log.i(TAG, "clickCreditCardNumberTextBox: Clicked credit card number text box") Log.i(TAG, "clickCreditCardNumberTextBox: Clicked the credit card number text box")
Log.i(TAG, "clickCreditCardNumberTextBox: Waiting for $waitingTimeShort ms for $appName window to be updated")
mDevice.waitForWindowUpdate(appName, waitingTimeShort) mDevice.waitForWindowUpdate(appName, waitingTimeShort)
Log.i(TAG, "clickCreditCardNumberTextBox: Waited for $waitingTimeShort ms for $appName window to be updated")
} }
fun clickCreditCardFormSubmitButton() { fun clickCreditCardFormSubmitButton() {
Log.i(TAG, "clickCreditCardFormSubmitButton: Trying to click the credit card form submit button and wait for $waitingTime ms for a new window")
itemWithResId("submit").clickAndWaitForNewWindow(waitingTime) itemWithResId("submit").clickAndWaitForNewWindow(waitingTime)
Log.i(TAG, "clickCreditCardFormSubmitButton: Clicked credit card form submit button") Log.i(TAG, "clickCreditCardFormSubmitButton: Clicked the credit card form submit button and waited for $waitingTime ms for a new window")
} }
fun fillAndSaveCreditCard(cardNumber: String, cardName: String, expiryMonthAndYear: String) { fun fillAndSaveCreditCard(cardNumber: String, cardName: String, expiryMonthAndYear: String) {
Log.i(TAG, "fillAndSaveCreditCard: Tying to set credit card number to: $cardNumber")
itemWithResId("cardNumber").setText(cardNumber) itemWithResId("cardNumber").setText(cardNumber)
Log.i(TAG, "fillAndSaveCreditCard: Set card number to: $cardNumber") Log.i(TAG, "fillAndSaveCreditCard: Credit card number was set to: $cardNumber")
mDevice.waitForIdle(waitingTime) mDevice.waitForIdle(waitingTime)
Log.i(TAG, "fillAndSaveCreditCard: Trying to set credit card name to: $cardName")
itemWithResId("nameOnCard").setText(cardName) itemWithResId("nameOnCard").setText(cardName)
Log.i(TAG, "fillAndSaveCreditCard: Set card name to: $cardName") Log.i(TAG, "fillAndSaveCreditCard: Credit card name was set to: $cardName")
mDevice.waitForIdle(waitingTime) mDevice.waitForIdle(waitingTime)
Log.i(TAG, "fillAndSaveCreditCard: Trying to set credit card expiry month and year to: $expiryMonthAndYear")
itemWithResId("expiryMonthAndYear").setText(expiryMonthAndYear) itemWithResId("expiryMonthAndYear").setText(expiryMonthAndYear)
Log.i(TAG, "fillAndSaveCreditCard: Set expiry month and year to: $expiryMonthAndYear") Log.i(TAG, "fillAndSaveCreditCard: Credit card expiry month and year were set to: $expiryMonthAndYear")
Log.i(TAG, "fillAndSaveCreditCard: Waiting for device to be idle for $waitingTime ms")
mDevice.waitForIdle(waitingTime) mDevice.waitForIdle(waitingTime)
Log.i(TAG, "fillAndSaveCreditCard: Waited for device to be idle for $waitingTime ms")
Log.i(TAG, "fillAndSaveCreditCard: Trying to click the credit card form submit button and wait for $waitingTime ms for a new window")
itemWithResId("submit").clickAndWaitForNewWindow(waitingTime) itemWithResId("submit").clickAndWaitForNewWindow(waitingTime)
Log.i(TAG, "fillAndSaveCreditCard: Clicked credit card form submit button") Log.i(TAG, "fillAndSaveCreditCard: Clicked the credit card form submit button and waited for $waitingTime ms for a new window")
waitForPageToLoad() waitForPageToLoad()
Log.i(TAG, "fillAndSaveCreditCard: Waiting for $waitingTime ms for $packageName window to be updated")
mDevice.waitForWindowUpdate(packageName, waitingTime) mDevice.waitForWindowUpdate(packageName, waitingTime)
Log.i(TAG, "fillAndSaveCreditCard: Waited for $waitingTime ms for $packageName window to be updated")
} }
fun verifyUpdateOrSaveCreditCardPromptExists(exists: Boolean) = fun verifyUpdateOrSaveCreditCardPromptExists(exists: Boolean) =
@ -463,7 +489,9 @@ class BrowserRobot {
} }
fun verifySuggestedUserName(userName: String) { fun verifySuggestedUserName(userName: String) {
Log.i(TAG, "verifySuggestedUserName: Waiting for $waitingTime ms for suggested logins fragment to exist")
itemWithResId("$packageName:id/mozac_feature_login_multiselect_expand").waitForExists(waitingTime) itemWithResId("$packageName:id/mozac_feature_login_multiselect_expand").waitForExists(waitingTime)
Log.i(TAG, "verifySuggestedUserName: Waited for $waitingTime ms for suggested logins fragment to exist")
assertUIObjectExists(itemContainingText(userName)) assertUIObjectExists(itemContainingText(userName))
} }
@ -548,43 +576,54 @@ class BrowserRobot {
fun verifyCookiesProtectionHintIsDisplayed(composeTestRule: HomeActivityComposeTestRule, isDisplayed: Boolean) { fun verifyCookiesProtectionHintIsDisplayed(composeTestRule: HomeActivityComposeTestRule, isDisplayed: Boolean) {
if (isDisplayed) { if (isDisplayed) {
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Trying to verify that the total cookie protection message is displayed")
composeTestRule.onNodeWithTag("tcp_cfr.message").assertIsDisplayed() composeTestRule.onNodeWithTag("tcp_cfr.message").assertIsDisplayed()
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified total cookie protection message is displayed") Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified total cookie protection message is displayed")
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Trying to verify that the total cookie protection learn more link is displayed")
composeTestRule.onNodeWithTag("tcp_cfr.action").assertIsDisplayed() composeTestRule.onNodeWithTag("tcp_cfr.action").assertIsDisplayed()
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified total cookie protection learn more link is displayed") Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified that the total cookie protection learn more link is displayed")
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Trying to verify that the total cookie protection dismiss button is displayed")
composeTestRule.onNodeWithTag("cfr.dismiss").assertIsDisplayed() composeTestRule.onNodeWithTag("cfr.dismiss").assertIsDisplayed()
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified total cookie protection dismiss button is displayed") Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified total cookie protection dismiss button is displayed")
} else { } else {
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Trying to verify that the total cookie protection message does not exist")
composeTestRule.onNodeWithTag("tcp_cfr.message").assertDoesNotExist() composeTestRule.onNodeWithTag("tcp_cfr.message").assertDoesNotExist()
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified total cookie protection message does not exist") Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified that the total cookie protection message does not exist")
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Trying to verify that the total cookie protection learn more link does not exist")
composeTestRule.onNodeWithTag("tcp_cfr.action").assertDoesNotExist() composeTestRule.onNodeWithTag("tcp_cfr.action").assertDoesNotExist()
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified total cookie protection learn more link does not exist") Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified total cookie protection learn more link does not exist")
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Trying to verify that the total cookie protection dismiss button does not exist")
composeTestRule.onNodeWithTag("cfr.dismiss").assertDoesNotExist() composeTestRule.onNodeWithTag("cfr.dismiss").assertDoesNotExist()
Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified total cookie protection dismiss button does not exist") Log.i(TAG, "verifyCookiesProtectionHintIsDisplayed: Verified that the total cookie protection dismiss button does not exist")
} }
} }
fun clickTCPCFRLearnMore(composeTestRule: HomeActivityComposeTestRule) { fun clickTCPCFRLearnMore(composeTestRule: HomeActivityComposeTestRule) {
Log.i(TAG, "clickTCPCFRLearnMore: Trying to click the total cookie protection learn more link")
composeTestRule.onNodeWithTag("tcp_cfr.action").performClick() composeTestRule.onNodeWithTag("tcp_cfr.action").performClick()
Log.i(TAG, "clickTCPCFRLearnMore: Clicked total cookie protection learn more link") Log.i(TAG, "clickTCPCFRLearnMore: Clicked total cookie protection learn more link")
} }
fun dismissTCPCFRPopup(composeTestRule: HomeActivityComposeTestRule) { fun dismissTCPCFRPopup(composeTestRule: HomeActivityComposeTestRule) {
Log.i(TAG, "dismissTCPCFRPopup: Trying to click the total cookie protection dismiss button")
composeTestRule.onNodeWithTag("cfr.dismiss").performClick() composeTestRule.onNodeWithTag("cfr.dismiss").performClick()
Log.i(TAG, "dismissTCPCFRPopup: Clicked total cookie protection dismiss button") Log.i(TAG, "dismissTCPCFRPopup: Clicked total cookie protection dismiss button")
} }
fun verifyShouldShowCFRTCP(shouldShow: Boolean, settings: Settings) { fun verifyShouldShowCFRTCP(shouldShow: Boolean, settings: Settings) {
if (shouldShow) { if (shouldShow) {
Log.i(TAG, "verifyShouldShowCFRTCP: Trying to verify that the TCP CFR should be shown")
assertTrue(settings.shouldShowTotalCookieProtectionCFR) assertTrue(settings.shouldShowTotalCookieProtectionCFR)
Log.i(TAG, "verifyShouldShowCFRTCP: Verified that TCP CFR should be shown") Log.i(TAG, "verifyShouldShowCFRTCP: Verified that the TCP CFR should be shown")
} else { } else {
Log.i(TAG, "verifyShouldShowCFRTCP: Trying to verify that the TCP CFR should not be shown")
assertFalse(settings.shouldShowTotalCookieProtectionCFR) assertFalse(settings.shouldShowTotalCookieProtectionCFR)
Log.i(TAG, "verifyShouldShowCFRTCP: Verified that TCP CFR should not be shown") Log.i(TAG, "verifyShouldShowCFRTCP: Verified that the TCP CFR should not be shown")
} }
} }
fun selectTime(hour: Int, minute: Int) { fun selectTime(hour: Int, minute: Int) {
Log.i(TAG, "selectTime: Trying to select time picker hour: $hour and minute: $minute")
onView( onView(
isAssignableFrom(TimePicker::class.java), isAssignableFrom(TimePicker::class.java),
).inRoot( ).inRoot(
@ -674,17 +713,18 @@ class BrowserRobot {
for (i in 1..RETRY_COUNT) { for (i in 1..RETRY_COUNT) {
try { try {
Log.i(TAG, "verifySelectedDropDownOption: Started try #$i") Log.i(TAG, "verifySelectedDropDownOption: Started try #$i")
Log.i(TAG, "verifySelectedDropDownOption: Looking for \"Submit drop down option\" form button") Log.i(TAG, "verifySelectedDropDownOption: Waiting for $waitingTime ms for \"Submit drop down option\" form button to exist")
mDevice.findObject( mDevice.findObject(
UiSelector() UiSelector()
.textContains("Submit drop down option") .textContains("Submit drop down option")
.resourceId("submitOption"), .resourceId("submitOption"),
).waitForExists(waitingTime) ).waitForExists(waitingTime)
Log.i(TAG, "verifySelectedDropDownOption: Waited for $waitingTime ms for \"Submit drop down option\" form button to exist")
assertUIObjectExists(itemContainingText("Selected option is: $optionName")) assertUIObjectExists(itemContainingText("Selected option is: $optionName"))
break break
} catch (e: AssertionError) { } catch (e: AssertionError) {
Log.i(TAG, "verifySelectedDropDownOption: AssertionError caught, executing fallback methods")
Log.e(TAG, "Selected option isn't displayed ${e.localizedMessage}") Log.e(TAG, "Selected option isn't displayed ${e.localizedMessage}")
clickPageObject(itemWithResId("dropDown")) clickPageObject(itemWithResId("dropDown"))
@ -704,16 +744,18 @@ class BrowserRobot {
fun verifyCookieBannerExists(exists: Boolean) { fun verifyCookieBannerExists(exists: Boolean) {
for (i in 1..RETRY_COUNT) { for (i in 1..RETRY_COUNT) {
Log.i(TAG, "verifyCookieBannerExists: For loop: $i") Log.i(TAG, "verifyCookieBannerExists: Started try #$i")
try { try {
// Wait for the blocker to kick-in and make the cookie banner disappear // Wait for the blocker to kick-in and make the cookie banner disappear
Log.i(TAG, "verifyCookieBannerExists: Waiting for $waitingTime ms for cookie banner to be gone")
itemWithResId("CybotCookiebotDialog").waitUntilGone(waitingTime) itemWithResId("CybotCookiebotDialog").waitUntilGone(waitingTime)
Log.i(TAG, "verifyCookieBannerExists: Waiting for window update") Log.i(TAG, "verifyCookieBannerExists: Waited for $waitingTime ms for cookie banner to be gone")
// Assert that the blocker properly dismissed the cookie banner // Assert that the blocker properly dismissed the cookie banner
assertUIObjectExists(itemWithResId("CybotCookiebotDialog"), exists = exists) assertUIObjectExists(itemWithResId("CybotCookiebotDialog"), exists = exists)
break break
} catch (e: AssertionError) { } catch (e: AssertionError) {
Log.i(TAG, "verifyCookieBannerExists: AssertionError caught, executing fallback methods")
if (i == RETRY_COUNT) { if (i == RETRY_COUNT) {
throw e throw e
} }
@ -840,11 +882,12 @@ class BrowserRobot {
assertUIObjectExists(itemWithDescription("Close")) assertUIObjectExists(itemWithDescription("Close"))
fun clickOpenLinksInAppsDismissCFRButton() { fun clickOpenLinksInAppsDismissCFRButton() {
Log.i(TAG, "clickOpenLinksInAppsDismissCFRButton: Trying to click the open links in apps banner \"Dismiss\" button")
itemWithResIdContainingText( itemWithResIdContainingText(
"$packageName:id/dismiss", "$packageName:id/dismiss",
getStringResource(R.string.open_in_app_cfr_negative_button_text), getStringResource(R.string.open_in_app_cfr_negative_button_text),
).click() ).click()
Log.i(TAG, "clickOpenLinksInAppsDismissCFRButton: Clicked open links in apps banner \"Dismiss\" button") Log.i(TAG, "clickOpenLinksInAppsDismissCFRButton: Clicked the open links in apps banner \"Dismiss\" button")
} }
fun clickTakeSurveyButton() { fun clickTakeSurveyButton() {
@ -871,6 +914,7 @@ class BrowserRobot {
} }
fun longClickToolbar() { fun longClickToolbar() {
Log.i(TAG, "longClickToolbar: Trying to long click the toolbar")
onView(withId(R.id.mozac_browser_toolbar_url_view)).perform(longClick()) onView(withId(R.id.mozac_browser_toolbar_url_view)).perform(longClick())
Log.i(TAG, "longClickToolbar: Long clicked the toolbar") Log.i(TAG, "longClickToolbar: Long clicked the toolbar")
} }
@ -903,27 +947,31 @@ class BrowserRobot {
} }
fun clickStayInPrivateBrowsingPromptButton() { fun clickStayInPrivateBrowsingPromptButton() {
Log.i(TAG, "clickStayInPrivateBrowsingPromptButton: Trying to click the \"STAY IN PRIVATE BROWSING\" prompt button")
itemWithResIdContainingText( itemWithResIdContainingText(
"$packageName:id/deny_button", "$packageName:id/deny_button",
getStringResource(R.string.mozac_feature_downloads_cancel_active_private_downloads_deny), getStringResource(R.string.mozac_feature_downloads_cancel_active_private_downloads_deny),
).click() ).click()
Log.i(TAG, "clickStayInPrivateBrowsingPromptButton: Clicked \"STAY IN PRIVATE BROWSING\" prompt button") Log.i(TAG, "clickStayInPrivateBrowsingPromptButton: Clicked the \"STAY IN PRIVATE BROWSING\" prompt button")
} }
fun clickCancelPrivateDownloadsPromptButton() { fun clickCancelPrivateDownloadsPromptButton() {
Log.i(TAG, "clickCancelPrivateDownloadsPromptButton: Trying to click the \"CANCEL DOWNLOADS\" prompt button")
itemWithResIdContainingText( itemWithResIdContainingText(
"$packageName:id/accept_button", "$packageName:id/accept_button",
getStringResource(R.string.mozac_feature_downloads_cancel_active_downloads_accept), getStringResource(R.string.mozac_feature_downloads_cancel_active_downloads_accept),
).click() ).click()
Log.i(TAG, "clickCancelPrivateDownloadsPromptButton: Clicked \"CANCEL DOWNLOADS\" prompt button") Log.i(TAG, "clickCancelPrivateDownloadsPromptButton: Clicked the \"CANCEL DOWNLOADS\" prompt button")
Log.i(TAG, "clickCancelPrivateDownloadsPromptButton: Waiting for $waitingTime ms for $packageName window to be updated")
mDevice.waitForWindowUpdate(packageName, waitingTime) mDevice.waitForWindowUpdate(packageName, waitingTime)
Log.i(TAG, "clickCancelPrivateDownloadsPromptButton: Waited for $waitingTime ms for $packageName window to be updated")
} }
fun fillPdfForm(name: String) { fun fillPdfForm(name: String) {
// Set PDF form text for the text box // Set PDF form text for the text box
Log.i(TAG, "fillPdfForm: Trying to set the text of the PDF form text box to: $name")
itemWithResId("pdfjs_internal_id_10R").setText(name) itemWithResId("pdfjs_internal_id_10R").setText(name)
Log.i(TAG, "fillPdfForm: Set PDF form text box text to: $name") Log.i(TAG, "fillPdfForm: PDF form text box text was set to: $name")
mDevice.waitForWindowUpdate(packageName, waitingTime) mDevice.waitForWindowUpdate(packageName, waitingTime)
if ( if (
!itemWithResId("pdfjs_internal_id_11R").exists() && !itemWithResId("pdfjs_internal_id_11R").exists() &&
@ -932,18 +980,22 @@ class BrowserRobot {
.contains("mInputShown=true") .contains("mInputShown=true")
) { ) {
// Close the keyboard // Close the keyboard
Log.i(TAG, "fillPdfForm: Trying to close the keyboard using device back button")
mDevice.pressBack() mDevice.pressBack()
Log.i(TAG, "fillPdfForm: Closing the keyboard using device back button") Log.i(TAG, "fillPdfForm: Closed the keyboard using device back button")
} }
// Click PDF form check box // Click PDF form check box
Log.i(TAG, "fillPdfForm: Trying to click the PDF form check box")
itemWithResId("pdfjs_internal_id_11R").click() itemWithResId("pdfjs_internal_id_11R").click()
Log.i(TAG, "fillPdfForm: Clicked PDF form check box") Log.i(TAG, "fillPdfForm: Clicked PDF form check box")
} }
class Transition { class Transition {
fun openThreeDotMenu(interact: ThreeDotMenuMainRobot.() -> Unit): ThreeDotMenuMainRobot.Transition { fun openThreeDotMenu(interact: ThreeDotMenuMainRobot.() -> Unit): ThreeDotMenuMainRobot.Transition {
Log.i(TAG, "openThreeDotMenu: Waiting for device to be idle for $waitingTime ms")
mDevice.waitForIdle(waitingTime) mDevice.waitForIdle(waitingTime)
Log.i(TAG, "openThreeDotMenu: Device was idle for $waitingTime ms") Log.i(TAG, "openThreeDotMenu: Device was idle for $waitingTime ms")
Log.i(TAG, "openThreeDotMenu: Trying to click the main menu button")
threeDotButton().perform(click()) threeDotButton().perform(click())
Log.i(TAG, "openThreeDotMenu: Clicked the main menu button") Log.i(TAG, "openThreeDotMenu: Clicked the main menu button")
@ -953,8 +1005,9 @@ class BrowserRobot {
fun openNavigationToolbar(interact: NavigationToolbarRobot.() -> Unit): NavigationToolbarRobot.Transition { fun openNavigationToolbar(interact: NavigationToolbarRobot.() -> Unit): NavigationToolbarRobot.Transition {
clickPageObject(navURLBar()) clickPageObject(navURLBar())
Log.i(TAG, "openNavigationToolbar: Looking for search bar") Log.i(TAG, "openNavigationToolbar: Waiting for $waitingTime ms for for search bar to exist")
searchBar().waitForExists(waitingTime) searchBar().waitForExists(waitingTime)
Log.i(TAG, "openNavigationToolbar: Waited for $waitingTime ms for for search bar to exist")
NavigationToolbarRobot().interact() NavigationToolbarRobot().interact()
return NavigationToolbarRobot.Transition() return NavigationToolbarRobot.Transition()
@ -971,7 +1024,7 @@ class BrowserRobot {
), ),
waitingTime, waitingTime,
) )
Log.i(TAG, "openTabDrawer: Trying to click the tab counter button")
tabsCounter().click() tabsCounter().click()
Log.i(TAG, "openTabDrawer: Clicked the tab counter button") Log.i(TAG, "openTabDrawer: Clicked the tab counter button")
assertUIObjectExists(itemWithResId("$packageName:id/new_tab_button")) assertUIObjectExists(itemWithResId("$packageName:id/new_tab_button"))
@ -982,8 +1035,9 @@ class BrowserRobot {
if (i == RETRY_COUNT) { if (i == RETRY_COUNT) {
throw e throw e
} else { } else {
Log.i(TAG, "openTabDrawer: Waiting for device to be idle")
mDevice.waitForIdle() mDevice.waitForIdle()
Log.i(TAG, "openTabDrawer: Device waited to be idle") Log.i(TAG, "openTabDrawer: Waited for device to be idle")
} }
} }
} }
@ -1005,10 +1059,10 @@ class BrowserRobot {
), ),
waitingTime, waitingTime,
) )
Log.i(TAG, "openComposeTabDrawer: Trying to click the tab counter button")
tabsCounter().click() tabsCounter().click()
Log.i(TAG, "openComposeTabDrawer: Clicked the tab counter button") Log.i(TAG, "openComposeTabDrawer: Clicked the tab counter button")
Log.i(TAG, "openComposeTabDrawer: Trying to verify the tabs tray exists")
composeTestRule.onNodeWithTag(TabsTrayTestTag.tabsTray).assertExists() composeTestRule.onNodeWithTag(TabsTrayTestTag.tabsTray).assertExists()
Log.i(TAG, "openComposeTabDrawer: Verified the tabs tray exists") Log.i(TAG, "openComposeTabDrawer: Verified the tabs tray exists")
@ -1018,22 +1072,24 @@ class BrowserRobot {
if (i == RETRY_COUNT) { if (i == RETRY_COUNT) {
throw e throw e
} else { } else {
Log.i(TAG, "openComposeTabDrawer: Waiting for device to be idle")
mDevice.waitForIdle() mDevice.waitForIdle()
Log.i(TAG, "openComposeTabDrawer: Device waited to be idle") Log.i(TAG, "openComposeTabDrawer: Waited for device to be idle")
} }
} }
} }
Log.i(TAG, "openComposeTabDrawer: Trying to verify the tabs tray new tab FAB button exists")
composeTestRule.onNodeWithTag(TabsTrayTestTag.fab).assertExists() composeTestRule.onNodeWithTag(TabsTrayTestTag.fab).assertExists()
Log.i(TAG, "openComposeTabDrawer: Verified the tabs tray new tab button exists") Log.i(TAG, "openComposeTabDrawer: Verified the tabs tray new tab FAB button exists")
ComposeTabDrawerRobot(composeTestRule).interact() ComposeTabDrawerRobot(composeTestRule).interact()
return ComposeTabDrawerRobot.Transition(composeTestRule) return ComposeTabDrawerRobot.Transition(composeTestRule)
} }
fun openNotificationShade(interact: NotificationRobot.() -> Unit): NotificationRobot.Transition { fun openNotificationShade(interact: NotificationRobot.() -> Unit): NotificationRobot.Transition {
Log.i(TAG, "openNotificationShade: Trying to open the notification tray")
mDevice.openNotification() mDevice.openNotification()
Log.i(TAG, "openNotificationShade: Opened notification tray") Log.i(TAG, "openNotificationShade: Opened the notification tray")
NotificationRobot().interact() NotificationRobot().interact()
return NotificationRobot.Transition() return NotificationRobot.Transition()
@ -1041,8 +1097,7 @@ class BrowserRobot {
fun goToHomescreen(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition { fun goToHomescreen(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition {
clickPageObject(itemWithDescription("Home screen")) clickPageObject(itemWithDescription("Home screen"))
Log.i(TAG, "goToHomescreen: Waiting for $waitingTime ms for for home screen layout or jump back in contextual hint to exist")
Log.i(TAG, "goToHomescreen: Looking for home screen layout or jump back in contextual hint")
mDevice.findObject(UiSelector().resourceId("$packageName:id/homeLayout")) mDevice.findObject(UiSelector().resourceId("$packageName:id/homeLayout"))
.waitForExists(waitingTime) || .waitForExists(waitingTime) ||
mDevice.findObject( mDevice.findObject(
@ -1050,6 +1105,7 @@ class BrowserRobot {
getStringResource(R.string.onboarding_home_screen_jump_back_contextual_hint_2), getStringResource(R.string.onboarding_home_screen_jump_back_contextual_hint_2),
), ),
).waitForExists(waitingTime) ).waitForExists(waitingTime)
Log.i(TAG, "goToHomescreen: Waited for $waitingTime ms for for home screen layout or jump back in contextual hint to exist")
HomeScreenRobot().interact() HomeScreenRobot().interact()
return HomeScreenRobot.Transition() return HomeScreenRobot.Transition()
@ -1058,7 +1114,7 @@ class BrowserRobot {
fun goToHomescreenWithComposeTopSites(composeTestRule: HomeActivityComposeTestRule, interact: ComposeTopSitesRobot.() -> Unit): ComposeTopSitesRobot.Transition { fun goToHomescreenWithComposeTopSites(composeTestRule: HomeActivityComposeTestRule, interact: ComposeTopSitesRobot.() -> Unit): ComposeTopSitesRobot.Transition {
clickPageObject(itemWithDescription("Home screen")) clickPageObject(itemWithDescription("Home screen"))
Log.i(TAG, "goToHomescreenWithComposeTopSites: Looking for home screen layout or jump back in contextual hint") Log.i(TAG, "goToHomescreenWithComposeTopSites: Waiting for $waitingTime ms for for home screen layout or jump back in contextual hint to exist")
mDevice.findObject(UiSelector().resourceId("$packageName:id/homeLayout")) mDevice.findObject(UiSelector().resourceId("$packageName:id/homeLayout"))
.waitForExists(waitingTime) || .waitForExists(waitingTime) ||
mDevice.findObject( mDevice.findObject(
@ -1066,12 +1122,14 @@ class BrowserRobot {
getStringResource(R.string.onboarding_home_screen_jump_back_contextual_hint_2), getStringResource(R.string.onboarding_home_screen_jump_back_contextual_hint_2),
), ),
).waitForExists(waitingTime) ).waitForExists(waitingTime)
Log.i(TAG, "goToHomescreenWithComposeTopSites: Waited for $waitingTime ms for for home screen layout or jump back in contextual hint to exist")
ComposeTopSitesRobot(composeTestRule).interact() ComposeTopSitesRobot(composeTestRule).interact()
return ComposeTopSitesRobot.Transition(composeTestRule) return ComposeTopSitesRobot.Transition(composeTestRule)
} }
fun goBack(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition { fun goBack(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition {
Log.i(TAG, "goBack: Trying to click device back button")
mDevice.pressBack() mDevice.pressBack()
Log.i(TAG, "goBack: Clicked device back button") Log.i(TAG, "goBack: Clicked device back button")
@ -1081,7 +1139,9 @@ class BrowserRobot {
fun clickTabCrashedCloseButton(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition { fun clickTabCrashedCloseButton(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition {
clickPageObject(itemWithText("Close tab")) clickPageObject(itemWithText("Close tab"))
Log.i(TAG, "clickTabCrashedCloseButton: Waiting for device to be idle")
mDevice.waitForIdle() mDevice.waitForIdle()
Log.i(TAG, "clickTabCrashedCloseButton: Waited for device to be idle")
HomeScreenRobot().interact() HomeScreenRobot().interact()
return HomeScreenRobot.Transition() return HomeScreenRobot.Transition()
@ -1167,50 +1227,56 @@ class BrowserRobot {
} }
fun openSiteSecuritySheet(interact: SiteSecurityRobot.() -> Unit): SiteSecurityRobot.Transition { fun openSiteSecuritySheet(interact: SiteSecurityRobot.() -> Unit): SiteSecurityRobot.Transition {
Log.i(TAG, "openSiteSecuritySheet: Looking for site security toolbar button") Log.i(TAG, "openSiteSecuritySheet: Waiting for $waitingTime ms for site security toolbar button to exist")
siteSecurityToolbarButton().waitForExists(waitingTime) siteSecurityToolbarButton().waitForExists(waitingTime)
Log.i(TAG, "openSiteSecuritySheet: Waited for $waitingTime ms for site security toolbar button to exist")
Log.i(TAG, "openSiteSecuritySheet: Trying to click the site security toolbar button and wait for $waitingTime ms for a new window")
siteSecurityToolbarButton().clickAndWaitForNewWindow(waitingTime) siteSecurityToolbarButton().clickAndWaitForNewWindow(waitingTime)
Log.i(TAG, "openSiteSecuritySheet: Clicked site security toolbar button") Log.i(TAG, "openSiteSecuritySheet: Clicked the site security toolbar button and waited for $waitingTime ms for a new window")
SiteSecurityRobot().interact() SiteSecurityRobot().interact()
return SiteSecurityRobot.Transition() return SiteSecurityRobot.Transition()
} }
fun clickManageAddressButton(interact: SettingsSubMenuAutofillRobot.() -> Unit): SettingsSubMenuAutofillRobot.Transition { fun clickManageAddressButton(interact: SettingsSubMenuAutofillRobot.() -> Unit): SettingsSubMenuAutofillRobot.Transition {
Log.i(TAG, "clickManageAddressButton: Trying to click the manage address button and wait for $waitingTime ms for a new window")
itemWithResId("$packageName:id/manage_addresses") itemWithResId("$packageName:id/manage_addresses")
.clickAndWaitForNewWindow(waitingTime) .clickAndWaitForNewWindow(waitingTime)
Log.i(TAG, "clickManageAddressButton: Clicked manage address button") Log.i(TAG, "clickManageAddressButton: Clicked the manage address button and waited for $waitingTime ms for a new window")
SettingsSubMenuAutofillRobot().interact() SettingsSubMenuAutofillRobot().interact()
return SettingsSubMenuAutofillRobot.Transition() return SettingsSubMenuAutofillRobot.Transition()
} }
fun clickManageCreditCardsButton(interact: SettingsSubMenuAutofillRobot.() -> Unit): SettingsSubMenuAutofillRobot.Transition { fun clickManageCreditCardsButton(interact: SettingsSubMenuAutofillRobot.() -> Unit): SettingsSubMenuAutofillRobot.Transition {
Log.i(TAG, "clickManageCreditCardsButton: Trying to click the manage credit cards button and wait for $waitingTime ms for a new window")
itemWithResId("$packageName:id/manage_credit_cards") itemWithResId("$packageName:id/manage_credit_cards")
.clickAndWaitForNewWindow(waitingTime) .clickAndWaitForNewWindow(waitingTime)
Log.i(TAG, "clickManageCreditCardsButton: Clicked manage credit cards button") Log.i(TAG, "clickManageCreditCardsButton: Clicked the manage credit cards button and waited for $waitingTime ms for a new window")
SettingsSubMenuAutofillRobot().interact() SettingsSubMenuAutofillRobot().interact()
return SettingsSubMenuAutofillRobot.Transition() return SettingsSubMenuAutofillRobot.Transition()
} }
fun clickOpenLinksInAppsGoToSettingsCFRButton(interact: SettingsRobot.() -> Unit): SettingsRobot.Transition { fun clickOpenLinksInAppsGoToSettingsCFRButton(interact: SettingsRobot.() -> Unit): SettingsRobot.Transition {
Log.i(TAG, "clickOpenLinksInAppsGoToSettingsCFRButton: Trying to click the \"Go to settings\" open links in apps CFR button and wait for $waitingTime ms for a new window")
itemWithResIdContainingText( itemWithResIdContainingText(
"$packageName:id/action", "$packageName:id/action",
getStringResource(R.string.open_in_app_cfr_positive_button_text), getStringResource(R.string.open_in_app_cfr_positive_button_text),
).clickAndWaitForNewWindow(waitingTime) ).clickAndWaitForNewWindow(waitingTime)
Log.i(TAG, "clickOpenLinksInAppsGoToSettingsCFRButton: Clicked \"Go to settings\" open links in apps CFR button") Log.i(TAG, "clickOpenLinksInAppsGoToSettingsCFRButton: Clicked the \"Go to settings\" open links in apps CFR button and waited for $waitingTime ms for a new window")
SettingsRobot().interact() SettingsRobot().interact()
return SettingsRobot.Transition() return SettingsRobot.Transition()
} }
fun clickDownloadPDFButton(interact: DownloadRobot.() -> Unit): DownloadRobot.Transition { fun clickDownloadPDFButton(interact: DownloadRobot.() -> Unit): DownloadRobot.Transition {
Log.i(TAG, "clickDownloadPDFButton: Trying to click the download PDF button")
itemWithResIdContainingText( itemWithResIdContainingText(
"download", "download",
"Download", "Download",
).click() ).click()
Log.i(TAG, "clickDownloadPDFButton: Clicked download PDF button") Log.i(TAG, "clickDownloadPDFButton: Clicked the download PDF button")
DownloadRobot().interact() DownloadRobot().interact()
return DownloadRobot.Transition() return DownloadRobot.Transition()
@ -1270,8 +1336,10 @@ fun clickPageObject(item: UiObject) {
for (i in 1..RETRY_COUNT) { for (i in 1..RETRY_COUNT) {
try { try {
Log.i(TAG, "clickPageObject: Started try #$i") Log.i(TAG, "clickPageObject: Started try #$i")
Log.i(TAG, "clickPageObject: Looking for ${item.selector}") Log.i(TAG, "clickPageObject: Waiting for $waitingTime ms for ${item.selector} to exist")
item.waitForExists(waitingTime) item.waitForExists(waitingTime)
Log.i(TAG, "clickPageObject: Waited for $waitingTime ms for ${item.selector} to exist")
Log.i(TAG, "clickPageObject: Trying to click ${item.selector}")
item.click() item.click()
Log.i(TAG, "clickPageObject: Clicked ${item.selector}") Log.i(TAG, "clickPageObject: Clicked ${item.selector}")
@ -1295,8 +1363,10 @@ fun longClickPageObject(item: UiObject) {
for (i in 1..RETRY_COUNT) { for (i in 1..RETRY_COUNT) {
try { try {
Log.i(TAG, "longClickPageObject: Started try #$i") Log.i(TAG, "longClickPageObject: Started try #$i")
Log.i(TAG, "longClickPageObject: Looking for ${item.selector}") Log.i(TAG, "longClickPageObject: Waiting for $waitingTime ms for ${item.selector} to exist")
item.waitForExists(waitingTime) item.waitForExists(waitingTime)
Log.i(TAG, "longClickPageObject: Waited for $waitingTime ms for ${item.selector} to exist")
Log.i(TAG, "longClickPageObject: Trying to long click ${item.selector}")
item.longClick() item.longClick()
Log.i(TAG, "longClickPageObject: Long clicked ${item.selector}") Log.i(TAG, "longClickPageObject: Long clicked ${item.selector}")
@ -1321,21 +1391,25 @@ fun clickContextMenuItem(item: String) {
Until.findObject(text(item)), Until.findObject(text(item)),
waitingTime, waitingTime,
) )
Log.i(TAG, "clickContextMenuItem: Trying to click context menu item: $item")
mDevice.findObject(text(item)).click() mDevice.findObject(text(item)).click()
Log.i(TAG, "longClickPageObject: Clicked context menu item: $item") Log.i(TAG, "clickContextMenuItem: Clicked context menu item: $item")
} }
fun setPageObjectText(webPageItem: UiObject, text: String) { fun setPageObjectText(webPageItem: UiObject, text: String) {
for (i in 1..RETRY_COUNT) { for (i in 1..RETRY_COUNT) {
Log.i(TAG, "setPageObjectText: For loop i = $i") Log.i(TAG, "setPageObjectText: Started try #$i")
try { try {
webPageItem.also { webPageItem.also {
Log.i(TAG, "setPageObjectText: Looking for ${webPageItem.selector}") Log.i(TAG, "setPageObjectText: Waiting for $waitingTime ms for ${webPageItem.selector} to exist")
it.waitForExists(waitingTime) it.waitForExists(waitingTime)
Log.i(TAG, "setPageObjectText: Waited for $waitingTime ms for ${webPageItem.selector} to exist")
Log.i(TAG, "setPageObjectText: Trying to clear ${webPageItem.selector} text field")
it.clearTextField() it.clearTextField()
Log.i(TAG, "setPageObjectText: Cleared ${webPageItem.selector} text field") Log.i(TAG, "setPageObjectText: Cleared ${webPageItem.selector} text field")
Log.i(TAG, "setPageObjectText: Trying to set ${webPageItem.selector} text to $text")
it.text = text it.text = text
Log.i(TAG, "setPageObjectText: ${webPageItem.selector} text set to $text") Log.i(TAG, "setPageObjectText: ${webPageItem.selector} text was set to $text")
} }
break break
@ -1355,8 +1429,10 @@ fun setPageObjectText(webPageItem: UiObject, text: String) {
} }
fun clearTextFieldItem(item: UiObject) { fun clearTextFieldItem(item: UiObject) {
Log.i(TAG, "clearTextFieldItem: Looking for ${item.selector}") Log.i(TAG, "clearTextFieldItem: Waiting for $waitingTime ms for ${item.selector} to exist")
item.waitForExists(waitingTime) item.waitForExists(waitingTime)
Log.i(TAG, "clearTextFieldItem: Waited for $waitingTime ms for ${item.selector} to exist")
Log.i(TAG, "clearTextFieldItem: Trying to clear ${item.selector} text field")
item.clearTextField() item.clearTextField()
Log.i(TAG, "clearTextFieldItem: Cleared ${item.selector} text field") Log.i(TAG, "clearTextFieldItem: Cleared ${item.selector} text field")
} }

Loading…
Cancel
Save