diff --git a/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/AccountCreation/AccountCreation.java b/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/AccountCreation/AccountCreation.java index f93125e6..427ba07e 100644 --- a/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/AccountCreation/AccountCreation.java +++ b/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/AccountCreation/AccountCreation.java @@ -1,5 +1,6 @@ package cryptox_AndroidTest.AccountCreation; +import config.RetryAnalyzer; import org.testng.Assert; import org.testng.annotations.Ignore; import org.testng.annotations.Test; @@ -8,23 +9,59 @@ import static config.appiumconnection.driver; import static config.appiumconnection.openAppiumSession; import static cryptox_AndroidTest.baseClass.*; +import static pages.accountManagement.*; import static pages.createPassCodeScreen.createPassCodeNow; +import static pages.generalMethods.*; import static pages.landingScreen.clickConnectButton; import static pages.landingScreen.clickGetStarted; +import static pages.login.loginCryptoX; import static pages.popUps.AcceptNotificationPopUp; import static pages.repeatPassCodeScreen.repeatPassCodeNow; +import static pages.verifyPIN.verifyPinAndPressOK; import static pages.walletAccountCreationScreen.activateAccount; public class AccountCreation { -@Test + @Ignore public void createConcordionAccount() throws MalformedURLException { - Assert.assertTrue(AcceptNotificationPopUp()); - Assert.assertTrue(clickConnectButton()); - Assert.assertTrue(clickGetStarted()); - Assert.assertTrue(activateAccount()); - Assert.assertTrue(createPassCodeNow()); - Assert.assertTrue(repeatPassCodeNow()); + Assert.assertTrue(AcceptNotificationPopUp()); + Assert.assertTrue(clickConnectButton()); + Assert.assertTrue(clickGetStarted()); + Assert.assertTrue(activateAccount()); + Assert.assertTrue(createPassCodeNow()); + Assert.assertTrue(repeatPassCodeNow()); + } + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Z_verify_if_a_user_can_create_an_account() { + driver.terminateApp(PackageName); + driver.activateApp(PackageName); + Assert.assertTrue(loginCryptoX()); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); + Assert.assertTrue(clickOnElement("create_account_button", 10)); + Assert.assertTrue(SendTextToField("account_name_edittext", "AutomationAccount", 10)); + Assert.assertTrue(clickOnElement("next_button", 10)); + Assert.assertTrue(clickOnMostRecentIdentity()); + Assert.assertTrue(clickOnElement("confirm_submit_button", 10)); + Assert.assertTrue(verifyPinAndPressOK()); + Assert.assertTrue(verifyTextById("account_name", "AutomationAccount", 20)); + } + @Test(retryAnalyzer = RetryAnalyzer.class) + public void A_verify_if_user_can_rename_an_account() { + driver.terminateApp(PackageName); + driver.activateApp(PackageName); + Assert.assertTrue(loginCryptoX()); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); + Assert.assertTrue(clickOnElementByXpath("(//android.widget.ImageView[@content-desc=\"Account Settings\"])[1]", 10)); + Assert.assertTrue(clickOnElement("change_name", 10)); + Assert.assertTrue(SendTextToField("input_edittext", "AutomationTest", 10)); + Assert.assertTrue(clickOnElement("android:id/button1", 10)); + Assert.assertTrue(clickOnElement("toolbar_back_btn", 10)); + Assert.assertTrue(verifyAccountName("AutomationTest", 20)); + driver.terminateApp(PackageName); + driver.activateApp(PackageName); + Assert.assertTrue(loginCryptoX()); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); + Assert.assertTrue(clickOnAccount("AutomationTest",10)); } } diff --git a/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/AccountCreation/IdentityCreation.java b/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/AccountCreation/IdentityCreation.java new file mode 100644 index 00000000..95e6f45c --- /dev/null +++ b/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/AccountCreation/IdentityCreation.java @@ -0,0 +1,60 @@ +package cryptox_AndroidTest.AccountCreation; + +import config.RetryAnalyzer; +import org.testng.Assert; +import org.testng.annotations.Ignore; +import org.testng.annotations.Test; + +import static config.appiumconnection.driver; +import static config.appiumconnection.log; +import static cryptox_AndroidTest.baseClass.PackageName; +import static pages.accountManagement.*; +import static pages.appOperations.commands.performScroll; +import static pages.generalMethods.*; +import static pages.login.loginCryptoX; +import static pages.verifyPIN.verifyPinAndPressOK; + +public class IdentityCreation { + + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Z_verify_if_a_user_can_create_new_identity() { + driver.terminateApp(PackageName); + driver.activateApp(PackageName); + Assert.assertTrue(loginCryptoX()); + Assert.assertTrue(clickOnElement("allow_button",5)); + Assert.assertTrue(clickOnElement("toolbar_menu_drawer_btn", 10)); + Assert.assertTrue(clickOnElement("identities_layout",10)); + Assert.assertTrue(clickOnElement("toolbar_plus_btn_add_contact_image",10)); + Assert.assertTrue(clickOnElementByXpath("//*[contains(@text,\"Generated IP 0\")]",30)); + Assert.assertTrue(verifyPinAndPressOK()); + Assert.assertTrue(WaitForElement("com.android.chrome:id/compositor_view_holder",20)); + Assert.assertTrue(performScrollDown()); + Assert.assertTrue(clickOnElementByXpath("//android.widget.Button[@text=\"Submit\"]",10)); + Assert.assertTrue(clickOnElement("got_it_button",10)); + Assert.assertTrue(clickOnElement("confirm_button",10)); + Assert.assertTrue(clickOnElement("android:id/button2",10)); + log.info("Successfully created new identity"); + } + + @Test(retryAnalyzer = RetryAnalyzer.class) + public void A_verify_if_user_can_rename_identity() { + driver.terminateApp(PackageName); + driver.activateApp(PackageName); + Assert.assertTrue(loginCryptoX()); + Assert.assertTrue(clickOnElement("toolbar_menu_drawer_btn", 10)); + Assert.assertTrue(clickOnElement("identities_layout",10)); + Assert.assertTrue(clickOnMostRecentIdentity()); + Assert.assertTrue(clickOnElement("name_icon",10)); + Assert.assertTrue(SendTextToField("input_edittext", "AutomationTest", 20)); + Assert.assertTrue(clickOnElement("android:id/button1",20)); + Assert.assertTrue(verifyTextById("name_textview","AutomationTest",10)); + Assert.assertTrue(clickOnElement("toolbar_back_btn",10)); + Assert.assertTrue(verifyMostRecentIdentityName("AutomationTest",20)); + driver.terminateApp(PackageName); + driver.activateApp(PackageName); + Assert.assertTrue(loginCryptoX()); + Assert.assertTrue(clickOnElement("toolbar_menu_drawer_btn", 10)); + Assert.assertTrue(clickOnElement("identities_layout",10)); + Assert.assertTrue(verifyMostRecentIdentityName("AutomationTest",20)); + } +} diff --git a/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/Transactions/PLTTransactions.java b/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/Transactions/PLTTransactions.java index 8468e70c..8145a29d 100644 --- a/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/Transactions/PLTTransactions.java +++ b/cryptox-android-autotests/src/test/java/cryptox_AndroidTest/Transactions/PLTTransactions.java @@ -1,5 +1,7 @@ package cryptox_AndroidTest.Transactions; +import config.RetryAnalyzer; +import org.openqa.selenium.support.ui.Wait; import org.testng.Assert; import org.testng.annotations.Ignore; import org.testng.annotations.Test; @@ -36,193 +38,195 @@ public class PLTTransactions { public static final String DETAILS_TOKEN_PAUSED = "A paused token refers to a protocol-level token (PLT) whose balance-affecting operations, such as transfers, minting, and burning, are temporarily disabled by the token’s governance account. When a token is paused, any attempt to perform these actions will fail until the token is unpaused."; public String MEMO = "//android.widget.TextView[@text='This is Test Memo - Triggered through automated tests']"; - @Test - public void Verify_if_user_transfer_PLT_to_specific_account_with_memo() { + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Verify_if_user_transfer_PLT_to_specific_account_with_memo(){ driver.terminateApp(PackageName); driver.activateApp(PackageName); Assert.assertTrue(loginCryptoX()); - Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); - Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_ONE, 10)); - Assert.assertTrue(clickOnElement("menuitem_transfer", 10)); - Assert.assertTrue(clickOnElement("token_arrow", 10)); - Assert.assertTrue(clickOnToken(PLT_TOKEN, 10)); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 20)); + Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_ONE, 20)); + Assert.assertTrue(clickOnElement("menuitem_transfer", 20)); + Assert.assertTrue(clickOnElement("token_arrow", 20)); + Assert.assertTrue(clickOnToken(PLT_TOKEN, 20)); Assert.assertTrue(SendTextToField("amount", "0.1", 20)); Assert.assertTrue(clickOnElement("memo_layout", 20)); - Assert.assertTrue(clickOnElement("show_button", 10)); + Assert.assertTrue(clickOnElement("show_button", 20)); Assert.assertTrue(SendTextToField("memo_edittext", "This is Test Memo - Triggered through automated tests", 20)); - Assert.assertTrue(clickOnElement("confirm_button", 10)); - Assert.assertTrue(clickOnElement("recipient_layout", 10)); - Assert.assertTrue(clickOnElement("edittext", 10)); + Assert.assertTrue(clickOnElement("confirm_button", 20)); + Assert.assertTrue(clickOnElement("recipient_layout", 20)); + Assert.assertTrue(clickOnElement("edittext", 20)); Assert.assertTrue(SendTextToField("edittext", "4kRCVvjUxBGZyAmcHGP2mV9J4QvnXs5GYBaMTtmisg4DznYSRt", 20)); Assert.assertTrue(clickOnElement("continue_btn", 40)); Assert.assertTrue(clickOnElement("continue_btn", 40)); Assert.assertTrue(swipe()); Assert.assertTrue(verifyPinAndPressOK()); - Assert.assertTrue(clickOnElement("finish", 10)); + Assert.assertTrue(clickOnElement("finish", 20)); Assert.assertTrue(clickOnElement("menuitem_activity", 20)); - Assert.assertTrue(clickOnElementByXpath(PLT_TRANSFER_VALIDATION, 10)); - Assert.assertTrue(verifyElementByXpath(MEMO, 10)); + Assert.assertTrue(clickOnElementByXpath(PLT_TRANSFER_VALIDATION, 20)); + Assert.assertTrue(verifyElementByXpath(MEMO, 20)); } - @Test + @Test(retryAnalyzer = RetryAnalyzer.class) public void Verify_if_user_transfer_PLT_to_specific_account_without_memo() throws MalformedURLException, InterruptedException { driver.terminateApp(PackageName); driver.activateApp(PackageName); Assert.assertTrue(loginCryptoX()); + Assert.assertTrue(clickOnElement("allow_button",5)); Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 20)); - Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_ONE, 10)); - Assert.assertTrue(clickOnElement("menuitem_transfer", 10)); - Assert.assertTrue(clickOnElement("token_arrow", 10)); - Assert.assertTrue(clickOnToken(PLT_TOKEN, 10)); + Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_ONE, 20)); + Assert.assertTrue(clickOnElement("menuitem_transfer", 20)); + Assert.assertTrue(clickOnElement("token_arrow", 20)); + Assert.assertTrue(clickOnToken(PLT_TOKEN, 20)); Assert.assertTrue(SendTextToField("amount", "0.1", 20)); - Assert.assertTrue(clickOnElement("recipient_layout", 10)); - Assert.assertTrue(clickOnElement("edittext", 10)); + Assert.assertTrue(clickOnElement("recipient_layout", 20)); + Assert.assertTrue(clickOnElement("edittext", 20)); Assert.assertTrue(SendTextToField("edittext", "4kRCVvjUxBGZyAmcHGP2mV9J4QvnXs5GYBaMTtmisg4DznYSRt", 20)); Assert.assertTrue(clickOnElement("continue_btn", 40)); Assert.assertTrue(clickOnElement("continue_btn", 40)); Assert.assertTrue(swipe()); Assert.assertTrue(verifyPinAndPressOK()); - Assert.assertTrue(clickOnElement("finish", 10)); + Assert.assertTrue(clickOnElement("finish", 20)); Assert.assertTrue(clickOnElement("menuitem_activity", 20)); - Assert.assertTrue(clickOnElementByXpath(PLT_TRANSFER_VALIDATION, 10)); - Assert.assertTrue(elementShouldNotAvailable(MEMO, 10)); + Assert.assertTrue(clickOnElementByXpath(PLT_TRANSFER_VALIDATION, 20)); + Assert.assertTrue(elementShouldNotAvailable(MEMO, 20)); } - @Test - public void Verify_PLT_token_screen_with_metadata() { + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Verify_PLT_token_screen_with_metadata(){ driver.terminateApp(PackageName); driver.activateApp(PackageName); Assert.assertTrue(loginCryptoX()); - Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); - Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_ONE, 10)); - Assert.assertTrue(clickOnToken(PLT_LEVEL_TOKEN, 10)); - Assert.assertTrue(clickOnElement("keep_button", 10)); - Assert.assertTrue(clickOnElement("raw_metadata_label", 10)); - Assert.assertTrue(verifyElementById("details_text_view", 10)); - Assert.assertTrue(clickOnElement("deny_button", 10)); - Assert.assertTrue(verifyElementByXpath("//android.widget.TextView[@text=\"Description\"]", 10)); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 20)); + Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_ONE, 20)); + Assert.assertTrue(clickOnToken(PLT_LEVEL_TOKEN, 20)); + Assert.assertTrue(clickOnElement("keep_button", 20)); + Assert.assertTrue(clickOnElement("raw_metadata_label", 20)); + Assert.assertTrue(verifyElementById("details_text_view", 20)); + Assert.assertTrue(clickOnElement("deny_button", 20)); + Assert.assertTrue(verifyElementByXpath("//android.widget.TextView[@text=\"Description\"]", 20)); } - @Test - public void Verify_PLT_token_screen_without_metadata() { + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Verify_PLT_token_screen_without_metadata(){ driver.terminateApp(PackageName); driver.activateApp(PackageName); Assert.assertTrue(loginCryptoX()); - Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); - Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_ONE, 10)); - Assert.assertTrue(clickOnToken(PLT_TOKEN, 10)); - Assert.assertTrue(elementShouldNotAvailable("raw_metadata_label", 10)); - Assert.assertTrue(elementShouldNotAvailable("details_text_view", 10)); - Assert.assertTrue(elementShouldNotAvailable("deny_button", 10)); - Assert.assertTrue(elementShouldNotAvailable("//android.widget.TextView[@text=\"Description\"]", 10)); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 20)); + Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_ONE, 20)); + Assert.assertTrue(clickOnToken(PLT_TOKEN, 20)); + Assert.assertTrue(elementShouldNotAvailable("raw_metadata_label", 20)); + Assert.assertTrue(elementShouldNotAvailable("details_text_view", 20)); + Assert.assertTrue(elementShouldNotAvailable("deny_button", 20)); + Assert.assertTrue(elementShouldNotAvailable("//android.widget.TextView[@text=\"Description\"]", 20)); } - @Test - public void Verify_PLT_token_when_sender_is_not_in_allow_list() { + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Verify_PLT_token_when_sender_is_not_in_allow_list(){ driver.terminateApp(PackageName); driver.activateApp(PackageName); Assert.assertTrue(loginCryptoX()); - Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); - Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_TWO, 10)); - Assert.assertTrue(clickOnElement("manage_tokens", 10)); - Assert.assertTrue(clickOnElement("toolbar_plus_btn_add_contact_image", 10)); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 20)); + Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_TWO, 20)); + Assert.assertTrue(clickOnElement("manage_tokens", 20)); + Assert.assertTrue(clickOnElement("toolbar_plus_btn_add_contact_image", 20)); Assert.assertTrue(SendTextToField("edittext", "PLTForAndroid", 20)); - Assert.assertTrue(clickOnElement("search_icon", 10)); - Assert.assertTrue(clickOnElement("selection", 10)); - Assert.assertTrue(clickOnElement("add_tokens_btn", 10)); + Assert.assertTrue(clickOnElement("search_icon", 20)); + Assert.assertTrue(clickOnElement("selection", 20)); + Assert.assertTrue(clickOnElement("add_tokens_btn", 20)); Assert.assertTrue(clickOnElement("toolbar_back_btn", 20)); Assert.assertTrue(clickOnToken(PLT_FOR_ANDROID_TOKEN, 20)); - Assert.assertTrue(verifyTextById("list_status_title", TEXT_ALLOW_LIST_NOT_MEMBER, 10)); - Assert.assertTrue(clickOnElement("list_status_title", 10)); - Assert.assertTrue(verifyTextById("title_text_view", TITLE_ALLOW_DENY_LIST, 10)); - Assert.assertTrue(verifyTextById("details_text_view", DETAILS_ALLOW_DENY_LIST, 10)); - Assert.assertTrue(clickOnElement("done_button", 10)); - Assert.assertTrue(clickOnElement("toolbar_back_btn", 10)); - Assert.assertTrue(clickOnElement("menuitem_transfer", 10)); - Assert.assertTrue(clickOnElement("token_arrow", 10)); - Assert.assertTrue(elementShouldNotAvailable(PLT_FOR_ANDROID_TOKEN, 10)); + Assert.assertTrue(verifyTextById("list_status_title", TEXT_ALLOW_LIST_NOT_MEMBER, 20)); + Assert.assertTrue(clickOnElement("list_status_title", 20)); + Assert.assertTrue(verifyTextById("title_text_view", TITLE_ALLOW_DENY_LIST, 20)); + Assert.assertTrue(verifyTextById("details_text_view", DETAILS_ALLOW_DENY_LIST, 20)); + Assert.assertTrue(clickOnElement("done_button", 20)); + Assert.assertTrue(clickOnElement("toolbar_back_btn", 20)); + Assert.assertTrue(clickOnElement("menuitem_transfer", 20)); + Assert.assertTrue(clickOnElement("token_arrow", 20)); + Assert.assertTrue(elementShouldNotAvailable(PLT_FOR_ANDROID_TOKEN, 20)); } - @Test - public void Verify_PLT_token_when_sender_is_in_allow_list() { + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Verify_PLT_token_when_sender_is_in_allow_list(){ driver.terminateApp(PackageName); driver.activateApp(PackageName); Assert.assertTrue(loginCryptoX()); - Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); - Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_TWO, 10)); - Assert.assertTrue(clickOnToken(PLT_TOKEN, 10)); - Assert.assertTrue(verifyTextById("list_status_title", TEXT_ALLOW_LIST_MEMBER, 10)); - Assert.assertTrue(clickOnElement("list_status_title", 10)); - Assert.assertTrue(verifyTextById("title_text_view", TITLE_ALLOW_DENY_LIST, 10)); - Assert.assertTrue(verifyTextById("details_text_view", DETAILS_ALLOW_DENY_LIST, 10)); - Assert.assertTrue(clickOnElement("done_button", 10)); - Assert.assertTrue(clickOnElement("toolbar_back_btn", 10)); - Assert.assertTrue(clickOnElement("menuitem_transfer", 10)); - Assert.assertTrue(clickOnElement("token_arrow", 10)); - Assert.assertTrue(clickOnToken(PLT_TOKEN, 10)); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 20)); + Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_TWO, 20)); + Assert.assertTrue(clickOnToken(PLT_TOKEN, 20)); + Assert.assertTrue(clickOnElement("keep_button", 20)); + Assert.assertTrue(verifyTextById("list_status_title", TEXT_ALLOW_LIST_MEMBER, 20)); + Assert.assertTrue(clickOnElement("list_status_title", 20)); + Assert.assertTrue(verifyTextById("title_text_view", TITLE_ALLOW_DENY_LIST, 20)); + Assert.assertTrue(verifyTextById("details_text_view", DETAILS_ALLOW_DENY_LIST, 20)); + Assert.assertTrue(clickOnElement("done_button", 20)); + Assert.assertTrue(clickOnElement("toolbar_back_btn", 20)); + Assert.assertTrue(clickOnElement("menuitem_transfer", 20)); + Assert.assertTrue(clickOnElement("token_arrow", 20)); + Assert.assertTrue(clickOnToken(PLT_TOKEN, 20)); Assert.assertTrue(SendTextToField("amount", "0.1", 20)); - Assert.assertTrue(clickOnElement("recipient_layout", 10)); - Assert.assertTrue(clickOnElement("edittext", 10)); + Assert.assertTrue(clickOnElement("recipient_layout", 20)); + Assert.assertTrue(clickOnElement("edittext", 20)); Assert.assertTrue(SendTextToField("edittext", "4j5RYKNs4RQYT16kBxq4MY6djLQbuPbsec6eiR3Y7B4hCneNHj", 20)); Assert.assertTrue(clickOnElement("continue_btn", 40)); Assert.assertTrue(clickOnElement("continue_btn", 40)); Assert.assertTrue(swipe()); Assert.assertTrue(verifyPinAndPressOK()); - Assert.assertTrue(clickOnElement("finish", 10)); + Assert.assertTrue(clickOnElement("finish", 20)); } - @Test - public void Verify_PLT_token_when_sender_is_in_deny_list() { + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Verify_PLT_token_when_sender_is_in_deny_list(){ driver.terminateApp(PackageName); driver.activateApp(PackageName); Assert.assertTrue(loginCryptoX()); - Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 20)); Assert.assertTrue(clickOnAccount(PLT_DENY_ACCOUNT, 20)); - Assert.assertTrue(clickOnToken(PLT_IN_DENY_TOKEN, 10)); - Assert.assertTrue(clickOnElement("keep_button", 10)); - Assert.assertTrue(verifyTextById("list_status_title", TEXT_DENY_LIST_MEMBER, 10)); - Assert.assertTrue(clickOnElement("list_status_title", 10)); - Assert.assertTrue(verifyTextById("title_text_view", TITLE_ALLOW_DENY_LIST, 10)); - Assert.assertTrue(verifyTextById("details_text_view", DETAILS_ALLOW_DENY_LIST, 10)); - Assert.assertTrue(clickOnElement("done_button", 10)); + Assert.assertTrue(clickOnToken(PLT_IN_DENY_TOKEN, 20)); + Assert.assertTrue(clickOnElement("keep_button", 20)); + Assert.assertTrue(verifyTextById("list_status_title", TEXT_DENY_LIST_MEMBER, 20)); + Assert.assertTrue(clickOnElement("list_status_title", 20)); + Assert.assertTrue(verifyTextById("title_text_view", TITLE_ALLOW_DENY_LIST, 20)); + Assert.assertTrue(verifyTextById("details_text_view", DETAILS_ALLOW_DENY_LIST, 20)); + Assert.assertTrue(clickOnElement("done_button", 20)); } - @Test - public void Verify_PLT_token_when_sender_is_not_in_deny_list() { + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Verify_PLT_token_when_sender_is_not_in_deny_list(){ driver.terminateApp(PackageName); driver.activateApp(PackageName); Assert.assertTrue(loginCryptoX()); - Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); - Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_TWO, 10)); - Assert.assertTrue(clickOnToken(PLT_TOKEN, 10)); - Assert.assertTrue(clickOnElement("keep_button", 10)); - Assert.assertFalse(verifyTextById("list_status_title", TEXT_DENY_LIST_MEMBER, 10)); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 20)); + Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_TWO, 20)); + Assert.assertTrue(clickOnToken(PLT_TOKEN, 20)); + Assert.assertTrue(clickOnElement("keep_button", 20)); + Assert.assertFalse(verifyTextById("list_status_title", TEXT_DENY_LIST_MEMBER, 20)); } - @Test - public void Verify_PLT_token_paused() { + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Verify_PLT_token_paused(){ driver.terminateApp(PackageName); driver.activateApp(PackageName); Assert.assertTrue(loginCryptoX()); - Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); - Assert.assertTrue(clickOnAccount(PLT_PAUSED_ACCOUNT, 10)); - Assert.assertTrue(clickOnToken(PLT_PAUSED_TOKEN, 10)); - Assert.assertTrue(clickOnElement("keep_button", 10)); - Assert.assertTrue(verifyTextById("list_status_title", TEXT_TOKEN_PAUSED, 10)); - Assert.assertTrue(clickOnElement("list_status_title", 10)); - Assert.assertTrue(verifyTextById("title_text_view", TITLE_PAUSED_TOKENS, 10)); - Assert.assertTrue(verifyTextById("details_text_view", DETAILS_TOKEN_PAUSED, 10)); - Assert.assertTrue(clickOnElement("done_button", 10)); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 20)); + Assert.assertTrue(clickOnAccount(PLT_PAUSED_ACCOUNT, 20)); + Assert.assertTrue(clickOnToken(PLT_PAUSED_TOKEN, 20)); + Assert.assertTrue(clickOnElement("keep_button", 20)); + Assert.assertTrue(verifyTextById("list_status_title", TEXT_TOKEN_PAUSED, 20)); + Assert.assertTrue(clickOnElement("list_status_title", 20)); + Assert.assertTrue(verifyTextById("title_text_view", TITLE_PAUSED_TOKENS, 20)); + Assert.assertTrue(verifyTextById("details_text_view", DETAILS_TOKEN_PAUSED, 20)); + Assert.assertTrue(clickOnElement("done_button", 20)); } - @Test - public void Verify_PLT_token_un_paused() { + @Test(retryAnalyzer = RetryAnalyzer.class) + public void Verify_PLT_token_un_paused(){ driver.terminateApp(PackageName); driver.activateApp(PackageName); Assert.assertTrue(loginCryptoX()); - Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 10)); - Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_TWO, 10)); - Assert.assertTrue(clickOnToken(PLT_TOKEN, 10)); - Assert.assertFalse(verifyTextById("list_status_title", TEXT_TOKEN_PAUSED, 10)); + Assert.assertTrue(clickOnElement("toolbar_account_btn_image", 20)); + Assert.assertTrue(clickOnAccount(PLT_ACCOUNT_TWO, 20)); + Assert.assertTrue(clickOnToken(PLT_TOKEN, 20)); + Assert.assertFalse(verifyTextById("list_status_title", TEXT_TOKEN_PAUSED, 20)); } } \ No newline at end of file diff --git a/cryptox-android-autotests/src/test/java/pages/accountManagement.java b/cryptox-android-autotests/src/test/java/pages/accountManagement.java new file mode 100644 index 00000000..18fa6aab --- /dev/null +++ b/cryptox-android-autotests/src/test/java/pages/accountManagement.java @@ -0,0 +1,128 @@ +package pages; + +import io.appium.java_client.MobileBy; +import io.appium.java_client.MobileElement; +import io.appium.java_client.TouchAction; +import io.appium.java_client.touch.WaitOptions; +import io.appium.java_client.touch.offset.PointOption; +import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.interactions.PointerInput; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.time.Duration; +import java.util.Arrays; +import java.util.List; + +import static config.appiumconnection.driver; +import static config.appiumconnection.log; + +public class accountManagement { + + public static boolean verifyAccountName(String accountName, int timeout) { + String xpath = String.format( + "//android.widget.TextView[@resource-id='com.pioneeringtechventures.wallet.stagenet:id/account_name' and @text='%s']", + accountName + ); + + try { + WebDriverWait wait = new WebDriverWait(driver, timeout); + + wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath))); + + log.info("Account name '{}' verified successfully.", accountName); + return true; + + } catch (Exception e) { + log.error("Failed to verify account name '{}'.", accountName); + return false; + } + } + + public static boolean performScrollDown() { + try { + driver.findElement(MobileBy.AndroidUIAutomator( + "new UiScrollable(new UiSelector().scrollable(true)).scrollForward()")); + log.info("Performed scroll down successfully."); + return true; + } catch (Exception e) { + log.error("Failed to perform scroll down: " + e.getMessage()); + return false; + } + } + + public static boolean clickOnMostRecentIdentity() { + try { + MobileElement lastIdentity = scrollToLastIdentity(); + if (lastIdentity == null) { + log.error("No identities found in the Identity RecyclerView."); + return false; + } + + lastIdentity.click(); + log.info("Clicked on the most recent identity successfully."); + return true; + + } catch (Exception e) { + log.error("Failed to click on the most recent identity.", e); + return false; + } + } + + public static boolean verifyMostRecentIdentityName(String expectedName, int timeoutInSeconds) { + try { + MobileElement lastIdentity = scrollToLastIdentity(); + if (lastIdentity == null) { + log.error("No identities found in the Identity RecyclerView."); + return false; + } + + MobileElement nameTextView = lastIdentity.findElement( + By.id("com.pioneeringtechventures.wallet.stagenet:id/name_textview") + ); + + String actualName = nameTextView.getText(); + if (expectedName.equals(actualName)) { + log.info("Last identity name verification PASSED: " + actualName); + return true; + } else { + log.error("Last identity name verification FAILED. Actual: " + actualName + ", Expected: " + expectedName); + return false; + } + + } catch (Exception e) { + log.error("Error verifying the last identity name.", e); + return false; + } + } + + private static MobileElement scrollToLastIdentity() { + By identityLocator = By.xpath( + "//android.widget.LinearLayout[@resource-id='com.pioneeringtechventures.wallet.stagenet:id/identity_view']" + ); + + int maxScrolls = 30; + int scrollCount = 0; + MobileElement lastIdentity = null; + + while (scrollCount < maxScrolls) { + List identities = driver.findElements(identityLocator); + if (!identities.isEmpty()) { + lastIdentity = identities.get(identities.size() - 1); + if (lastIdentity.isDisplayed()) { + break; + } + } + + boolean scrolled = performScrollDown(); + if (!scrolled) break; + + scrollCount++; + } + return lastIdentity; + } + + + +} diff --git a/cryptox-android-autotests/src/test/java/pages/generalMethods.java b/cryptox-android-autotests/src/test/java/pages/generalMethods.java index 3c308ebd..b952ee3a 100644 --- a/cryptox-android-autotests/src/test/java/pages/generalMethods.java +++ b/cryptox-android-autotests/src/test/java/pages/generalMethods.java @@ -1,13 +1,24 @@ package pages; +import io.appium.java_client.MobileBy; import io.appium.java_client.MobileElement; -import org.openqa.selenium.By; +import io.appium.java_client.TouchAction; +import io.appium.java_client.android.AndroidDriver; +import io.appium.java_client.android.nativekey.AndroidKey; +import io.appium.java_client.touch.WaitOptions; +import io.appium.java_client.touch.offset.PointOption; +import org.openqa.selenium.*; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; +import java.awt.event.KeyEvent; +import java.time.Duration; +import java.util.HashSet; import java.util.List; +import java.util.Set; import static config.appiumconnection.*; +import static pages.accountManagement.performScrollDown; public class generalMethods { @@ -112,12 +123,71 @@ public static boolean verifyElementByXpath(String elementID, Integer timeout) { return false; } - public static boolean clickOnAccount(String accountName, int timeout) { - String xpath = String.format( - "//android.widget.TextView[@resource-id='com.pioneeringtechventures.wallet.stagenet:id/account_name' and @text='%s']", - accountName - ); - return clickOnElementByXpath(xpath, timeout); + public static boolean clickOnAccount(String expectedAccount, int timeout) { + + int maxScrolls = 6; + Set visitedAccounts = new HashSet<>(); + + try { + log.info("Trying to click account: {}", expectedAccount); + + WebDriverWait wait = new WebDriverWait(driver, timeout); + + for (int scrollCount = 1; scrollCount <= maxScrolls; scrollCount++) { + + log.info("Fetching visible accounts. Scroll attempt: {}", scrollCount); + + List accounts = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.id("com.pioneeringtechventures.wallet.stagenet:id/account_name"))); + + log.info("Accounts visible on screen: {}", accounts.size()); + + for (WebElement account : accounts) { + + String actualName; + try { + actualName = account.getText(); + } catch (StaleElementReferenceException e) { + log.warn("Stale element detected. Skipping."); + continue; + } + + if (visitedAccounts.contains(actualName)) { + continue; + } + + visitedAccounts.add(actualName); + log.info("Found account name: {}", actualName); + + if (actualName.equalsIgnoreCase(expectedAccount)) { + + wait.until(ExpectedConditions.elementToBeClickable(account)).click(); + log.info("Successfully clicked account: {}", actualName); + return true; + } + } + + log.warn("Account '{}' not found. Scrolling down...", expectedAccount); + + boolean scrolled = performScrollDown(); + Thread.sleep(800); + + if (!scrolled) { + log.warn("Reached end of list. No more scrolling possible."); + break; + } + } + + log.error("Account '{}' not found after {} scrolls", expectedAccount, maxScrolls); + return false; + + } catch (TimeoutException e) { + log.error("Timed out waiting for account list", e); + return false; + + } catch (Exception e) { + log.error("Unexpected exception while clicking account '{}'", expectedAccount, e); + return false; + } } public static boolean clickOnToken(String tokenName, int timeoutInSeconds) { @@ -155,27 +225,21 @@ public static boolean clickOnElementByXpath(String elementID, Integer timeout) { return false; } - public static boolean SendTextToField(String elementID, String Text, Integer timeout) - - { - try - { + public static boolean SendTextToField(String elementID, String Text, Integer timeout) { + try { By elementIDs = By.id(elementID); - MobileElement elementToLookFor = waitForElement(elementIDs,timeout); + MobileElement elementToLookFor = waitForElement(elementIDs, timeout); assert elementToLookFor != null; - if (elementToLookFor.isDisplayed()){ + if (elementToLookFor.isDisplayed()) { elementToLookFor.clear(); elementToLookFor.click(); elementToLookFor.sendKeys(Text); return true; - } - - - else { + } else { - System.out.println("unable to find Element" + elementID ); + System.out.println("unable to find Element" + elementID); return false; } @@ -189,27 +253,21 @@ public static boolean SendTextToField(String elementID, String Text, Integer tim return false; } - public static boolean SendTextToFieldByClassName(String elementID, String Text, Integer timeout) - - { - try - { + public static boolean SendTextToFieldByClassName(String elementID, String Text, Integer timeout) { + try { By elementIDs = By.className(elementID); - MobileElement elementToLookFor = waitForElement(elementIDs,timeout); + MobileElement elementToLookFor = waitForElement(elementIDs, timeout); assert elementToLookFor != null; - if (elementToLookFor.isDisplayed()){ + if (elementToLookFor.isDisplayed()) { elementToLookFor.clear(); elementToLookFor.click(); elementToLookFor.sendKeys(Text); return true; - } - - - else { + } else { - System.out.println("unable to find Element" + elementID ); + System.out.println("unable to find Element" + elementID); return false; } @@ -236,7 +294,7 @@ public static boolean WaitForElement(String elementID, Integer Timeout) { return true; } else { - log.error("unable to find Element{}", elementID , "While waiting for element"); + log.error("unable to find Element{}", elementID, "While waiting for element"); return false; } diff --git a/cryptox-android-autotests/testng.xml b/cryptox-android-autotests/testng.xml index 2cd73493..84aab774 100644 --- a/cryptox-android-autotests/testng.xml +++ b/cryptox-android-autotests/testng.xml @@ -15,6 +15,8 @@ + +