From 0f69f257c47b4f33997fd2a2028a54c5f8285c23 Mon Sep 17 00:00:00 2001 From: pachlava Date: Wed, 22 Dec 2021 12:00:41 +0200 Subject: [PATCH 01/12] Added Several `Contact Support` tests. --- .../wordpress/android/e2e/ContactUsTests.java | 84 ++++++++++++++++ .../android/e2e/flows/LoginFlow.java | 6 ++ .../e2e/pages/ContactSupportScreen.java | 96 +++++++++++++++++++ .../e2e/pages/HelpAndSupportScreen.java | 63 ++++++++++++ .../android/support/WPSupportUtils.java | 14 +++ 5 files changed, 263 insertions(+) create mode 100644 WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java create mode 100644 WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java create mode 100644 WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java new file mode 100644 index 000000000000..a8cdfb2d452f --- /dev/null +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java @@ -0,0 +1,84 @@ +package org.wordpress.android.e2e; + +import androidx.test.espresso.Espresso; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.wordpress.android.R; +import org.wordpress.android.e2e.flows.LoginFlow; +import org.wordpress.android.e2e.pages.ContactSupportScreen; +import org.wordpress.android.support.BaseTest; + +import static org.wordpress.android.BuildConfig.E2E_WP_COM_USER_EMAIL; +import static org.wordpress.android.support.WPSupportUtils.pressBackUntilElementIsDisplayed; + +public class ContactUsTests extends BaseTest { + @Before + public void setUp() { + logoutIfNecessary(); + } + + @After + public void tearDown() { + pressBackUntilElementIsDisplayed(R.id.continue_with_wpcom_button); + } + + @Test + public void sendButtonEnabledWhenTextIsEntered() { + new LoginFlow() + .chooseContinueWithWpCom() + .tapHelp() + .assertHelpAndSupportScreenLoaded() + .setEmailIfNeeded("WPcomTest@test.com") + .openContactUs() + .assertContactSupportScreenLoaded() + .assertSendButtonDisabled() + .setMessageText("Hello") + .assertSendButtonEnabled() + .setMessageText("") + .assertSendButtonDisabled(); + } + + @Test + public void messageCanBeSent() { + String senderEmailAddress = "WPcomTest@test.com"; + String userMessageText = "Please ignore, this is an automated test."; + String automatedReplyText = "Mobile support will respond as soon as possible, " + + "generally within 48-96 hours. " + + "Please reply with your site address (URL) " + + "and any additional details we should know."; + + try { + new LoginFlow() + .chooseContinueWithWpCom() + .tapHelp() + .setEmailIfNeeded(senderEmailAddress) + .openContactUs() + .setMessageText(userMessageText) + .tapSendButton() + .assertUserMessageDelivered(userMessageText) + .assertSystemMessageReceived(automatedReplyText); + } finally { + Espresso.pressBack(); + new ContactSupportScreen().deleteUnsentMessageIfNeeded(); + } + } + + @Test + public void helpCanBeOpenedWhileEnteringEmail() { + new LoginFlow() + .chooseContinueWithWpCom() + .tapHelp() + .assertHelpAndSupportScreenLoaded(); + } + + @Test + public void helpCanBeOpenedWhileEnteringPassword() { + new LoginFlow() + .chooseContinueWithWpCom() + .enterEmailAddress(E2E_WP_COM_USER_EMAIL) + .tapHelp() + .assertHelpAndSupportScreenLoaded(); + } +} diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/flows/LoginFlow.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/flows/LoginFlow.java index 1b8b5b63823e..6214c1ae16d8 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/flows/LoginFlow.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/flows/LoginFlow.java @@ -10,6 +10,7 @@ import org.hamcrest.Matchers; import org.wordpress.android.BuildConfig; import org.wordpress.android.R; +import org.wordpress.android.e2e.pages.HelpAndSupportScreen; import org.wordpress.android.ui.accounts.LoginMagicLinkInterceptActivity; import static androidx.test.core.app.ApplicationProvider.getApplicationContext; @@ -128,4 +129,9 @@ public LoginFlow enterSiteAddress(String siteAddress) { clickOn(R.id.bottom_button); return this; } + + public HelpAndSupportScreen tapHelp() { + clickOn(onView(withId(R.id.help))); + return new HelpAndSupportScreen(); + } } diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java new file mode 100644 index 000000000000..66f5fa1a5a7a --- /dev/null +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java @@ -0,0 +1,96 @@ +package org.wordpress.android.e2e.pages; + +import androidx.test.espresso.ViewInteraction; +import androidx.test.espresso.action.ViewActions; + +import org.wordpress.android.R; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant; +import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.isEnabled; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.not; +import static org.wordpress.android.support.WPSupportUtils.populateTextField; +import static org.wordpress.android.support.WPSupportUtils.waitForElementToBeDisplayed; +import static org.wordpress.android.support.WPSupportUtils.waitForElementToBeDisplayedWithoutFailure; + +public class ContactSupportScreen { + static ViewInteraction textInput = onView(withId(R.id.message_composer_input_text)); + static ViewInteraction sendButton = onView(withId(R.id.message_composer_send_btn)); + static ViewInteraction attachButton = onView(withId(R.id.attachments_indicator_icon)); + + // Actions: + public ContactSupportScreen tapSendButton() { + sendButton.perform(ViewActions.click()); + return this; + } + + public ContactSupportScreen setMessageText(String text) { + populateTextField(textInput, text); + return this; + } + + public HelpAndSupportScreen deleteUnsentMessageIfNeeded() { + ViewInteraction unsentMessageAlert = onView( + withText("Going back will delete your message. " + + "Are you sure you want to delete it?" + )); + + if (waitForElementToBeDisplayedWithoutFailure(unsentMessageAlert)) { + onView(withText("Delete")) + .perform(ViewActions.click()); + } + + return new HelpAndSupportScreen(); + } + + // Assertions: + public ContactSupportScreen assertContactSupportScreenLoaded() { + textInput.check(matches(isCompletelyDisplayed())); + sendButton.check(matches(isCompletelyDisplayed())); + attachButton.check(matches(isCompletelyDisplayed())); + return this; + } + + public ContactSupportScreen assertSendButtonDisabled() { + sendButton.check(matches(not(isEnabled()))); + return this; + } + + public ContactSupportScreen assertSendButtonEnabled() { + sendButton.check(matches(isEnabled())); + return this; + } + + public ContactSupportScreen assertUserMessageDelivered(String messageText) { + ViewInteraction userMessageContainer = onView(allOf( + withId(R.id.request_user_message_container), + hasDescendant(allOf( + withId(R.id.request_user_message_text), + withText(messageText) + )), + hasDescendant(allOf( + withId(R.id.request_user_message_status), + withText("Delivered") + )) + )); + + waitForElementToBeDisplayed(userMessageContainer); + userMessageContainer.check(matches(isCompletelyDisplayed())); + return this; + } + + public ContactSupportScreen assertSystemMessageReceived(String messageText) { + ViewInteraction systemResponseBubble = onView(allOf( + withId(R.id.request_system_message_text), + withText(messageText))); + + waitForElementToBeDisplayed(systemResponseBubble); + systemResponseBubble.check(matches(isCompletelyDisplayed())); + return this; + } +} diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java new file mode 100644 index 000000000000..d9137c45ae8c --- /dev/null +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java @@ -0,0 +1,63 @@ +package org.wordpress.android.e2e.pages; + +import androidx.test.espresso.Espresso; +import androidx.test.espresso.ViewInteraction; +import androidx.test.espresso.action.ViewActions; + +import org.wordpress.android.R; +import org.wordpress.android.e2e.flows.LoginFlow; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.*; +import static androidx.test.espresso.matcher.ViewMatchers.withId; + +import static org.wordpress.android.support.WPSupportUtils.*; + +import static org.hamcrest.Matchers.allOf; + + +public class HelpAndSupportScreen { + static ViewInteraction contactUsButton = onView(withId(R.id.contact_us_button)); + static ViewInteraction FAQButton = onView(withId(R.id.faq_button)); + static ViewInteraction myTicketsbutton = onView(withId(R.id.my_tickets_button)); + static ViewInteraction applicationLogButton = onView(withId(R.id.application_log_button)); + static ViewInteraction applicationVersionText = onView(withId(R.id.applicationVersion)); + static ViewInteraction emailAddressText = onView(withId(R.id.contactEmailAddress)); + + + public HelpAndSupportScreen assertHelpAndSupportScreenLoaded() { + contactUsButton.check(matches(isCompletelyDisplayed())); + FAQButton.check(matches(isCompletelyDisplayed())); + myTicketsbutton.check(matches(isCompletelyDisplayed())); + applicationLogButton.check(matches(isCompletelyDisplayed())); + applicationVersionText.check(matches(isCompletelyDisplayed())); + emailAddressText.check(matches(isCompletelyDisplayed())); + return this; + } + + public HelpAndSupportScreen setEmailIfNeeded(String emailAddress) { + ViewInteraction emailNotSet = onView(allOf(withId(R.id.contactEmailAddress), withText("Not set"))); + + if (isElementCompletelyDisplayed(emailNotSet)) { + emailNotSet.perform(ViewActions.click()); + populateTextField(R.id.support_identity_input_dialog_email_edit_text, emailAddress); + + onView(withText("OK")).perform(ViewActions.click()); + } + + return this; + } + + public ContactSupportScreen openContactUs() { + clickOn(contactUsButton); + return new ContactSupportScreen(); + } + + public LoginFlow navigateBack() { + Espresso.pressBack(); + return new LoginFlow(); + } +} + + diff --git a/WordPress/src/androidTest/java/org/wordpress/android/support/WPSupportUtils.java b/WordPress/src/androidTest/java/org/wordpress/android/support/WPSupportUtils.java index 725951f087b1..4b61a83cf224 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/support/WPSupportUtils.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/support/WPSupportUtils.java @@ -475,6 +475,20 @@ public Boolean get() { return isElementDisplayed(elementID); } + public static boolean waitForElementToBeDisplayedWithoutFailure(final ViewInteraction element) { + try { + waitForConditionToBeTrueWithoutFailure(new Supplier() { + @Override + public Boolean get() { + return isElementDisplayed(element); + } + }); + } catch (Exception e) { + // ignore the failure + } + return isElementDisplayed(element); + } + public static void waitForConditionToBeTrue(Supplier supplier) { if (supplier.get()) { return; From a57a010d4e888c9a982c9a310674001ca7430317 Mon Sep 17 00:00:00 2001 From: pachlava Date: Wed, 22 Dec 2021 12:29:06 +0200 Subject: [PATCH 02/12] Adjusted the imports to fix checkstyle warnings --- .../wordpress/android/e2e/ContactUsTests.java | 29 +++++++++++-------- .../e2e/pages/HelpAndSupportScreen.java | 19 ++++-------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java index a8cdfb2d452f..a8f53bd7481f 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java @@ -26,18 +26,23 @@ public void tearDown() { @Test public void sendButtonEnabledWhenTextIsEntered() { - new LoginFlow() - .chooseContinueWithWpCom() - .tapHelp() - .assertHelpAndSupportScreenLoaded() - .setEmailIfNeeded("WPcomTest@test.com") - .openContactUs() - .assertContactSupportScreenLoaded() - .assertSendButtonDisabled() - .setMessageText("Hello") - .assertSendButtonEnabled() - .setMessageText("") - .assertSendButtonDisabled(); + try { + new LoginFlow() + .chooseContinueWithWpCom() + .tapHelp() + .assertHelpAndSupportScreenLoaded() + .setEmailIfNeeded("WPcomTest@test.com") + .openContactUs() + .assertContactSupportScreenLoaded() + .assertSendButtonDisabled() + .setMessageText("Hello") + .assertSendButtonEnabled() + .setMessageText("") + .assertSendButtonDisabled(); + } finally { + Espresso.pressBack(); + new ContactSupportScreen().deleteUnsentMessageIfNeeded(); + } } @Test diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java index d9137c45ae8c..9c3fadbe3a41 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java @@ -1,19 +1,17 @@ package org.wordpress.android.e2e.pages; -import androidx.test.espresso.Espresso; import androidx.test.espresso.ViewInteraction; import androidx.test.espresso.action.ViewActions; import org.wordpress.android.R; -import org.wordpress.android.e2e.flows.LoginFlow; import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.matcher.ViewMatchers.*; +import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withId; - -import static org.wordpress.android.support.WPSupportUtils.*; - +import static org.wordpress.android.support.WPSupportUtils.isElementCompletelyDisplayed; +import static org.wordpress.android.support.WPSupportUtils.populateTextField; import static org.hamcrest.Matchers.allOf; @@ -50,14 +48,7 @@ public HelpAndSupportScreen setEmailIfNeeded(String emailAddress) { } public ContactSupportScreen openContactUs() { - clickOn(contactUsButton); + contactUsButton.perform(ViewActions.click()); return new ContactSupportScreen(); } - - public LoginFlow navigateBack() { - Espresso.pressBack(); - return new LoginFlow(); - } } - - From d4e294bc5597f428a70e184704300b3a1e3a859c Mon Sep 17 00:00:00 2001 From: pachlava Date: Wed, 22 Dec 2021 13:10:58 +0200 Subject: [PATCH 03/12] Variables renaming to solve stylecheck warnings --- .../wordpress/android/e2e/pages/HelpAndSupportScreen.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java index 9c3fadbe3a41..6248c4eee972 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java @@ -17,8 +17,8 @@ public class HelpAndSupportScreen { static ViewInteraction contactUsButton = onView(withId(R.id.contact_us_button)); - static ViewInteraction FAQButton = onView(withId(R.id.faq_button)); - static ViewInteraction myTicketsbutton = onView(withId(R.id.my_tickets_button)); + static ViewInteraction faqButton = onView(withId(R.id.faq_button)); + static ViewInteraction myTicketsButton = onView(withId(R.id.my_tickets_button)); static ViewInteraction applicationLogButton = onView(withId(R.id.application_log_button)); static ViewInteraction applicationVersionText = onView(withId(R.id.applicationVersion)); static ViewInteraction emailAddressText = onView(withId(R.id.contactEmailAddress)); @@ -26,8 +26,8 @@ public class HelpAndSupportScreen { public HelpAndSupportScreen assertHelpAndSupportScreenLoaded() { contactUsButton.check(matches(isCompletelyDisplayed())); - FAQButton.check(matches(isCompletelyDisplayed())); - myTicketsbutton.check(matches(isCompletelyDisplayed())); + faqButton.check(matches(isCompletelyDisplayed())); + myTicketsButton.check(matches(isCompletelyDisplayed())); applicationLogButton.check(matches(isCompletelyDisplayed())); applicationVersionText.check(matches(isCompletelyDisplayed())); emailAddressText.check(matches(isCompletelyDisplayed())); From 68c5a3aee12d7b5fb5b1454a9da97e0fe55052d5 Mon Sep 17 00:00:00 2001 From: pachlava Date: Wed, 22 Dec 2021 14:30:38 +0200 Subject: [PATCH 04/12] CI fail fix: added a conditional wait before entering an email. --- .../wordpress/android/e2e/ContactUsTests.java | 13 +++++-------- .../android/e2e/pages/ContactSupportScreen.java | 5 ++++- .../android/e2e/pages/HelpAndSupportScreen.java | 17 +++++++++++------ 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java index a8f53bd7481f..d08f22d4d412 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java @@ -1,7 +1,5 @@ package org.wordpress.android.e2e; -import androidx.test.espresso.Espresso; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -14,6 +12,8 @@ import static org.wordpress.android.support.WPSupportUtils.pressBackUntilElementIsDisplayed; public class ContactUsTests extends BaseTest { + static String senderEmailAddress = "WPcomTest@test.com"; + @Before public void setUp() { logoutIfNecessary(); @@ -31,7 +31,7 @@ public void sendButtonEnabledWhenTextIsEntered() { .chooseContinueWithWpCom() .tapHelp() .assertHelpAndSupportScreenLoaded() - .setEmailIfNeeded("WPcomTest@test.com") + .setEmailIfNeeded(senderEmailAddress) .openContactUs() .assertContactSupportScreenLoaded() .assertSendButtonDisabled() @@ -40,14 +40,12 @@ public void sendButtonEnabledWhenTextIsEntered() { .setMessageText("") .assertSendButtonDisabled(); } finally { - Espresso.pressBack(); - new ContactSupportScreen().deleteUnsentMessageIfNeeded(); + new ContactSupportScreen().goBackAndDeleteUnsentMessageIfNeeded(); } } @Test public void messageCanBeSent() { - String senderEmailAddress = "WPcomTest@test.com"; String userMessageText = "Please ignore, this is an automated test."; String automatedReplyText = "Mobile support will respond as soon as possible, " + "generally within 48-96 hours. " @@ -65,8 +63,7 @@ public void messageCanBeSent() { .assertUserMessageDelivered(userMessageText) .assertSystemMessageReceived(automatedReplyText); } finally { - Espresso.pressBack(); - new ContactSupportScreen().deleteUnsentMessageIfNeeded(); + new ContactSupportScreen().goBackAndDeleteUnsentMessageIfNeeded(); } } diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java index 66f5fa1a5a7a..65b73f0e8a2c 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java @@ -1,5 +1,6 @@ package org.wordpress.android.e2e.pages; +import androidx.test.espresso.Espresso; import androidx.test.espresso.ViewInteraction; import androidx.test.espresso.action.ViewActions; @@ -34,7 +35,9 @@ public ContactSupportScreen setMessageText(String text) { return this; } - public HelpAndSupportScreen deleteUnsentMessageIfNeeded() { + public HelpAndSupportScreen goBackAndDeleteUnsentMessageIfNeeded() { + Espresso.pressBack(); + ViewInteraction unsentMessageAlert = onView( withText("Going back will delete your message. " + "Are you sure you want to delete it?" diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java index 6248c4eee972..92aa98fa7d31 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java @@ -10,9 +10,10 @@ import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static org.wordpress.android.support.WPSupportUtils.isElementCompletelyDisplayed; +import static org.wordpress.android.support.WPSupportUtils.isElementDisplayed; import static org.wordpress.android.support.WPSupportUtils.populateTextField; import static org.hamcrest.Matchers.allOf; +import static org.wordpress.android.support.WPSupportUtils.waitForElementToBeDisplayedWithoutFailure; public class HelpAndSupportScreen { @@ -37,13 +38,17 @@ public HelpAndSupportScreen assertHelpAndSupportScreenLoaded() { public HelpAndSupportScreen setEmailIfNeeded(String emailAddress) { ViewInteraction emailNotSet = onView(allOf(withId(R.id.contactEmailAddress), withText("Not set"))); - if (isElementCompletelyDisplayed(emailNotSet)) { - emailNotSet.perform(ViewActions.click()); - populateTextField(R.id.support_identity_input_dialog_email_edit_text, emailAddress); + if (!isElementDisplayed(emailNotSet)) return this; - onView(withText("OK")).perform(ViewActions.click()); - } + emailNotSet.perform(ViewActions.click()); + ViewInteraction emailInput = onView(allOf( + withId(R.id.support_identity_input_dialog_email_edit_text) + )); + if (!waitForElementToBeDisplayedWithoutFailure(emailInput)) return this; + + populateTextField(emailInput, emailAddress); + onView(withText("OK")).perform(ViewActions.click()); return this; } From b492893b8d50527cf54bdbe0e5968b0f9a53e185 Mon Sep 17 00:00:00 2001 From: pachlava Date: Wed, 22 Dec 2021 15:29:23 +0200 Subject: [PATCH 05/12] CI fail fix: added more robust conditional wait when entering email --- .../android/e2e/pages/HelpAndSupportScreen.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java index 92aa98fa7d31..57f1e695f85d 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java @@ -41,14 +41,15 @@ public HelpAndSupportScreen setEmailIfNeeded(String emailAddress) { if (!isElementDisplayed(emailNotSet)) return this; emailNotSet.perform(ViewActions.click()); - ViewInteraction emailInput = onView(allOf( - withId(R.id.support_identity_input_dialog_email_edit_text) - )); + ViewInteraction emailInput = onView(withId(R.id.support_identity_input_dialog_email_edit_text)); if (!waitForElementToBeDisplayedWithoutFailure(emailInput)) return this; populateTextField(emailInput, emailAddress); - onView(withText("OK")).perform(ViewActions.click()); + ViewInteraction okButton = onView(withText("OK")); + waitForElementToBeDisplayedWithoutFailure(okButton); + okButton.perform(ViewActions.click()); + return this; } From 2539abd4f2a53050b898e35cbbc922de96fa111e Mon Sep 17 00:00:00 2001 From: pachlava Date: Wed, 22 Dec 2021 21:04:25 +0200 Subject: [PATCH 06/12] CI fail fix: Using a different locator for `OK` button --- .../org/wordpress/android/e2e/pages/HelpAndSupportScreen.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java index 57f1e695f85d..350a86269f69 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java @@ -46,8 +46,7 @@ public HelpAndSupportScreen setEmailIfNeeded(String emailAddress) { if (!waitForElementToBeDisplayedWithoutFailure(emailInput)) return this; populateTextField(emailInput, emailAddress); - ViewInteraction okButton = onView(withText("OK")); - waitForElementToBeDisplayedWithoutFailure(okButton); + ViewInteraction okButton = onView(withId(android.R.id.button1)); okButton.perform(ViewActions.click()); return this; From 5153c2704b66e2b7a9398afe12e08f340c26ab4b Mon Sep 17 00:00:00 2001 From: pachlava Date: Wed, 22 Dec 2021 21:40:38 +0200 Subject: [PATCH 07/12] CI fail fix: Rewrote a part that sets user email address and name. --- .../wordpress/android/e2e/ContactUsTests.java | 4 --- .../e2e/pages/HelpAndSupportScreen.java | 35 ++++++++++--------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java index d08f22d4d412..1b91f640b904 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/ContactUsTests.java @@ -12,8 +12,6 @@ import static org.wordpress.android.support.WPSupportUtils.pressBackUntilElementIsDisplayed; public class ContactUsTests extends BaseTest { - static String senderEmailAddress = "WPcomTest@test.com"; - @Before public void setUp() { logoutIfNecessary(); @@ -31,7 +29,6 @@ public void sendButtonEnabledWhenTextIsEntered() { .chooseContinueWithWpCom() .tapHelp() .assertHelpAndSupportScreenLoaded() - .setEmailIfNeeded(senderEmailAddress) .openContactUs() .assertContactSupportScreenLoaded() .assertSendButtonDisabled() @@ -56,7 +53,6 @@ public void messageCanBeSent() { new LoginFlow() .chooseContinueWithWpCom() .tapHelp() - .setEmailIfNeeded(senderEmailAddress) .openContactUs() .setMessageText(userMessageText) .tapSendButton() diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java index 350a86269f69..f6bf54ed40e6 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/HelpAndSupportScreen.java @@ -10,9 +10,8 @@ import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static org.wordpress.android.support.WPSupportUtils.isElementDisplayed; import static org.wordpress.android.support.WPSupportUtils.populateTextField; -import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.anyOf; import static org.wordpress.android.support.WPSupportUtils.waitForElementToBeDisplayedWithoutFailure; @@ -35,25 +34,27 @@ public HelpAndSupportScreen assertHelpAndSupportScreenLoaded() { return this; } - public HelpAndSupportScreen setEmailIfNeeded(String emailAddress) { - ViewInteraction emailNotSet = onView(allOf(withId(R.id.contactEmailAddress), withText("Not set"))); - - if (!isElementDisplayed(emailNotSet)) return this; + public ContactSupportScreen openContactUs() { + contactUsButton.perform(ViewActions.click()); + setEmailIfNeeded("WPcomTest@test.com", "TestUser"); + return new ContactSupportScreen(); + } - emailNotSet.perform(ViewActions.click()); + public void setEmailIfNeeded(String emailAddress, String userName) { ViewInteraction emailInput = onView(withId(R.id.support_identity_input_dialog_email_edit_text)); - if (!waitForElementToBeDisplayedWithoutFailure(emailInput)) return this; + if (!waitForElementToBeDisplayedWithoutFailure(emailInput)) { + return; + } populateTextField(emailInput, emailAddress); - ViewInteraction okButton = onView(withId(android.R.id.button1)); - okButton.perform(ViewActions.click()); - - return this; - } - - public ContactSupportScreen openContactUs() { - contactUsButton.perform(ViewActions.click()); - return new ContactSupportScreen(); + ViewInteraction nameInput = onView(withId(R.id.support_identity_input_dialog_name_edit_text)); + populateTextField(nameInput, userName); + + onView(anyOf( + withText(android.R.string.ok), + withId(android.R.id.button1) + )) + .perform(ViewActions.click()); } } From 77025df7f4ec66d73c4bef2d9ef48f4fe211fbcc Mon Sep 17 00:00:00 2001 From: pachlava Date: Wed, 22 Dec 2021 22:23:06 +0200 Subject: [PATCH 08/12] CI fail fix: added one more conditional wait --- .../org/wordpress/android/e2e/pages/ContactSupportScreen.java | 1 + 1 file changed, 1 insertion(+) diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java index 65b73f0e8a2c..532f013677dc 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/ContactSupportScreen.java @@ -53,6 +53,7 @@ public HelpAndSupportScreen goBackAndDeleteUnsentMessageIfNeeded() { // Assertions: public ContactSupportScreen assertContactSupportScreenLoaded() { + waitForElementToBeDisplayedWithoutFailure(textInput); textInput.check(matches(isCompletelyDisplayed())); sendButton.check(matches(isCompletelyDisplayed())); attachButton.check(matches(isCompletelyDisplayed())); From 08fd20d310edc08cf60e023d88f50aa6a0f121db Mon Sep 17 00:00:00 2001 From: pachlava Date: Thu, 23 Dec 2021 18:13:20 +0200 Subject: [PATCH 09/12] CI fail fix: finally figured out the reason (fingerscrossed) --- .idea/codeStyles/Project.xml | 23 ++------------ .../wordpress/android/e2e/ContactUsTests.java | 2 ++ .../e2e/pages/ContactSupportScreen.java | 30 +++++++++++++++---- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 7ef8f3098d07..af5b96c62150 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -35,20 +35,10 @@ -