From 2ae875f82a6c381143f337f284ccc5ed04aac220 Mon Sep 17 00:00:00 2001 From: Churikova Tetiana Date: Mon, 14 Mar 2022 17:16:26 +0100 Subject: [PATCH] e2e: browser group --- test/appium/support/testrail_report.py | 2 + ...ount.py => test_create_restore_account.py} | 21 +- .../atomic/account_management/test_keycard.py | 71 ------ .../atomic/account_management/test_profile.py | 34 --- .../test_wallet_management.py | 8 +- .../dapps_and_browsing/test_browsing.py | 137 ------------ .../dapps_and_browsing/test_deep_links.py | 1 - ...public.py => test_public_chat_browsing.py} | 208 +++++++++++++++--- .../transactions/test_dapps_transactions.py | 127 ----------- .../transactions/test_keycard_wallet.py | 72 +++++- ...{test_wallet.py => test_wallet_dapp_tx.py} | 99 ++++++++- .../test_multiple_driver_tests.py | 19 +- test/appium/views/dapps_view.py | 4 +- test/appium/views/web_views/base_web_view.py | 2 +- 14 files changed, 358 insertions(+), 447 deletions(-) rename test/appium/tests/atomic/account_management/{test_create_account.py => test_create_restore_account.py} (97%) rename test/appium/tests/atomic/{chats/test_public.py => test_public_chat_browsing.py} (75%) delete mode 100644 test/appium/tests/atomic/transactions/test_dapps_transactions.py rename test/appium/tests/atomic/transactions/{test_wallet.py => test_wallet_dapp_tx.py} (87%) diff --git a/test/appium/support/testrail_report.py b/test/appium/support/testrail_report.py index 9b2bc4bd75..7b4b130611 100644 --- a/test/appium/support/testrail_report.py +++ b/test/appium/support/testrail_report.py @@ -100,6 +100,7 @@ class TestrailReport(BaseTestReport): test_cases['critical'] = 730 test_cases['medium'] = 736 test_cases['upgrade'] = 881 + ## tests pr test_cases['public_chat'] = 50654 test_cases['one_to_one_chat'] = 50655 test_cases['group_chat'] = 50656 @@ -108,6 +109,7 @@ class TestrailReport(BaseTestReport): test_cases['wallet'] = 50661 test_cases['send_tx'] = 50662 test_cases['keycard_tx'] = 50663 + test_cases['browser'] = 50812 test_pr = list() for key in test_cases: if key != 'medium' and key != 'upgrade': diff --git a/test/appium/tests/atomic/account_management/test_create_account.py b/test/appium/tests/atomic/account_management/test_create_restore_account.py similarity index 97% rename from test/appium/tests/atomic/account_management/test_create_account.py rename to test/appium/tests/atomic/account_management/test_create_restore_account.py index 39ecb24af4..9e1affc0ee 100644 --- a/test/appium/tests/atomic/account_management/test_create_account.py +++ b/test/appium/tests/atomic/account_management/test_create_restore_account.py @@ -9,6 +9,7 @@ from tests.users import basic_user, transaction_senders, recovery_users @pytest.mark.xdist_group(name="onboarding_1") +@marks.critical class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase): @classmethod @@ -24,7 +25,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase): cls.username = cls.profile.default_username_text.text @marks.testrail_id(700742) - @marks.critical def test_onboarding_home_initial_popup(self): self.home.home_button.double_click() texts = ["chat-and-transact", "invite-friends"] @@ -39,7 +39,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700743) - @marks.critical def test_onboarding_share_contact_address(self): self.profile = self.home.profile_button.click() @@ -68,7 +67,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700744) - @marks.critical def test_onboarding_share_wallet_address(self): self.home.just_fyi("Copying wallet address") wallet = self.home.wallet_button.click() @@ -96,7 +94,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700745) - @marks.critical def test_onboarding_backup_seed_phrase_restore_same_login_logcat(self): self.home.just_fyi("Check that badge on profile about back up seed phrase is presented") if self.home.profile_button.counter.text != '1': @@ -144,7 +141,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700746) - @marks.critical def test_onboarding_cant_sign_in_with_invalid_password_logcat(self): self.home.profile_button.click() self.profile.logout() @@ -168,7 +164,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700747) - @marks.critical def test_onboarding_add_new_multiaccount_username_by_position_pass_validation(self): self.home.profile_button.click() self.profile.logout() @@ -227,8 +222,9 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() -@pytest.mark.xdist_group(name="recover_1") -class TestRecoverOneDeviceMerged(MultipleSharedDeviceTestCase): +@pytest.mark.xdist_group(name="restore_1") +@marks.critical +class TestRestoreOneDeviceMerged(MultipleSharedDeviceTestCase): @classmethod def setup_class(cls): cls.user = transaction_senders['A'] @@ -240,8 +236,7 @@ class TestRecoverOneDeviceMerged(MultipleSharedDeviceTestCase): cls.home = cls.sign_in.recover_access(passphrase=cls.passphrase, password=cls.password) @marks.testrail_id(700748) - @marks.critical - def test_recover_uppercase_whitespaces_seed_phrase_special_char_passw_logcat(self): + def test_restore_uppercase_whitespaces_seed_phrase_special_char_passw_logcat(self): profile = self.home.profile_button.click() public_key, username = self.sign_in.get_public_key_and_username(return_username=True) @@ -258,8 +253,7 @@ class TestRecoverOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700749) - @marks.critical - def test_recover_set_up_wallet_sign_phrase(self): + def test_restore_set_up_wallet_sign_phrase(self): wallet = self.sign_in.wallet_button.click() wallet.just_fyi("Initiating some transaction so the wallet signing phrase pop-up appears") @@ -308,8 +302,7 @@ class TestRecoverOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700750) - @marks.critical - def test_recover_validation_seed_phrase_field(self): + def test_restore_validation_seed_phrase_field(self): validations = [ { 'case': 'empty value', diff --git a/test/appium/tests/atomic/account_management/test_keycard.py b/test/appium/tests/atomic/account_management/test_keycard.py index ee489618c7..5c1c73a678 100644 --- a/test/appium/tests/atomic/account_management/test_keycard.py +++ b/test/appium/tests/atomic/account_management/test_keycard.py @@ -588,74 +588,3 @@ class TestCreateAccount(SingleDeviceTestCase): self.errors.verify_no_errors() - -class TestKeycardCreateMultiaccountMultipleDevice(MultipleDeviceTestCase): - - @marks.testrail_id(5689) - @marks.critical - def test_keycard_create_login_restore_unlock_same_seed(self): - self.create_drivers(2) - device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1]) - - device_1.just_fyi("Create keycard account and save seed phrase") - device_1.accept_tos_checkbox.enable() - device_1.get_started_button.click() - device_1.generate_key_button.click_until_presence_of_element(device_1.next_button) - device_1.next_button.click_until_absense_of_element(device_1.element_by_translation_id("intro-wizard-title2")) - keycard_flow = device_1.keycard_storage_button.click() - keycard_flow.confirm_pin_and_proceed() - seed_phrase = keycard_flow.backup_seed_phrase() - device_1.maybe_later_button.wait_for_visibility_of_element(30) - device_1.maybe_later_button.click_until_presence_of_element(device_1.lets_go_button) - device_1.lets_go_button.click_until_absense_of_element(device_1.lets_go_button) - device_1.profile_button.wait_for_visibility_of_element(30) - - device_2.just_fyi("Restore same multiaccount from seed phrase on another device") - device_2.recover_access(seed_phrase) - - device_1.just_fyi('Check that after creating keycard account balance is 0, not ...') - wallet_1 = device_1.wallet_button.click() - wallet_address = wallet_1.get_wallet_address() - wallet_1.wallet_button.double_click() - if wallet_1.status_account_total_usd_value.text != '0': - self.errors.append("Account USD value is not 0, it is %s" % wallet_1.status_account_total_usd_value.text) - public_key, default_username = device_1.get_public_key_and_username(return_username=True) - profile_1 = device_1.get_profile_view() - profile_1.logout() - - profile_1.just_fyi('Check that can login with keycard account') - device_1.multi_account_on_login_button.wait_for_visibility_of_element(5) - device_1.multi_account_on_login_button.click() - if not keycard_flow.element_by_text_part(default_username).is_element_displayed(): - self.errors.append("%s is not found on keycard login screen!" % default_username) - keycard_flow.enter_default_pin() - if not device_1.home_button.is_element_displayed(10): - self.errors.append('Keycard user is not logged in') - - device_2.just_fyi("Check username and wallet address on another device") - wallet_2 = device_2.wallet_button.click() - wallet_address_2 = wallet_2.get_wallet_address() - wallet_2.wallet_button.double_click() - if wallet_address != wallet_address_2: - self.errors.append('Wallet address on restored multiaccount is not equal to created keycard multiaccount') - public_key_2, default_username_2 = device_2.get_public_key_and_username(return_username=True) - if public_key != public_key_2: - self.errors.append('Public key on restored multiaccount is not equal to created keycard multiaccount') - if default_username_2 != default_username: - self.errors.append('Username on restored multiaccount is not equal to created keycard multiaccount') - - device_1.just_fyi('Unlock keycard multiaccount at attempt to restore same multiaccount from seed') - device_1.profile_button.click() - profile_1.logout() - device_1.access_key_button.click() - device_1.enter_seed_phrase_button.click() - device_1.seedphrase_input.click() - device_1.seedphrase_input.set_value(seed_phrase) - device_1.next_button.click() - device_1.element_by_translation_id("unlock", uppercase=True).click() - keycard_flow.enter_default_pin() - device_1_home = device_1.home_button.click() - device_1_home.plus_button.click() - if not device_1_home.start_new_chat_button.is_element_displayed(): - self.errors.append("Can't proceed using account after it's re-recover twice.") - self.errors.verify_no_errors() diff --git a/test/appium/tests/atomic/account_management/test_profile.py b/test/appium/tests/atomic/account_management/test_profile.py index 611964ebca..cc8a64f2e8 100644 --- a/test/appium/tests/atomic/account_management/test_profile.py +++ b/test/appium/tests/atomic/account_management/test_profile.py @@ -391,40 +391,6 @@ class TestProfileSingleDevice(SingleDeviceTestCase): self.errors.append("Support channel is not suggested for requesting a feature") self.errors.verify_no_errors() - @marks.testrail_id(5738) - @marks.high - def test_dapps_permissions(self): - home = SignInView(self.driver).create_user() - account_name = home.status_account_name - - home.just_fyi('open Status Test Dapp, allow all and check permissions in Profile') - web_view = home.open_status_test_dapp() - dapp = home.dapp_tab_button.click() - profile = home.profile_button.click() - profile.privacy_and_security_button.click() - profile.dapp_permissions_button.click() - profile.element_by_text(test_dapp_name).click() - if not profile.element_by_text(account_name).is_element_displayed(): - self.errors.append('Wallet permission was not granted') - if not profile.element_by_translation_id("chat-key").is_element_displayed(): - self.errors.append('Contact code permission was not granted') - - profile.just_fyi('revoke access and check that they are asked second time') - profile.revoke_access_button.click() - profile.back_button.click() - profile.dapp_tab_button.click() - - web_view.open_tabs_button.click() - web_view.empty_tab_button.click() - - dapp.open_url(test_dapp_url) - if not dapp.element_by_text_part(account_name).is_element_displayed(): - self.errors.append('Wallet permission is not asked') - if dapp.allow_button.is_element_displayed(): - dapp.allow_button.click(times_to_click=1) - if not dapp.element_by_translation_id("your-contact-code").is_element_displayed(): - self.errors.append('Profile permission is not asked') - self.errors.verify_no_errors() @marks.testrail_id(5368) @marks.medium diff --git a/test/appium/tests/atomic/account_management/test_wallet_management.py b/test/appium/tests/atomic/account_management/test_wallet_management.py index afa181d7ff..c63e78b591 100644 --- a/test/appium/tests/atomic/account_management/test_wallet_management.py +++ b/test/appium/tests/atomic/account_management/test_wallet_management.py @@ -10,6 +10,7 @@ from support.utilities import get_merged_txs_list @pytest.mark.xdist_group(name="wallet_management_1") +@marks.critical class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase): @classmethod @@ -27,7 +28,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase): 'STT': cls.wallet.get_asset_amount_by_name('STT')} @marks.testrail_id(700756) - @marks.critical def test_wallet_tx_history_copy_tx_hash_on_lte(self): self.wallet.accounts_status_account.click() address = wallet_users['D']['address'] @@ -79,7 +79,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700759) - @marks.critical def test_wallet_add_account_generate_new(self): self.wallet.just_fyi("Switching off LTE mode and navigating to home view") self.wallet.driver.set_network_connection(6) @@ -117,7 +116,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase): self.drivers[0].fail('Delete account option is shown on added account "On Status Tree"!') @marks.testrail_id(700758) - @marks.critical def test_wallet_manage_assets(self): asset = "HND" self.sign_in.just_fyi("Getting back to main wallet view") @@ -146,7 +144,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700760) - @marks.critical def test_wallet_add_delete_watch_only_account(self): self.wallet.get_back_to_home_view() self.wallet.accounts_status_account.swipe_left_on_element() @@ -195,7 +192,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700761) - @marks.critical def test_wallet_add_hide_unhide_account_private_key(self): self.wallet.get_back_to_home_view() if not self.wallet.add_account_button.is_element_displayed(3): @@ -256,7 +252,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700762) - @marks.critical @marks.skip # TODO: skipped due to #13016 def test_wallet_add_account_seed_phrase_collectibles_mainnet_rinkeby(self): @@ -365,7 +360,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700766) - @marks.high def test_wallet_fetching_balance_after_offline_insufficient_funds_errors(self): self.sign_in.driver.reset() sender = wallet_users['E'] diff --git a/test/appium/tests/atomic/dapps_and_browsing/test_browsing.py b/test/appium/tests/atomic/dapps_and_browsing/test_browsing.py index b5db2fa6bd..bca1383049 100644 --- a/test/appium/tests/atomic/dapps_and_browsing/test_browsing.py +++ b/test/appium/tests/atomic/dapps_and_browsing/test_browsing.py @@ -4,7 +4,6 @@ from views.sign_in_view import SignInView class TestBrowsing(SingleDeviceTestCase): - @marks.testrail_id(5395) @marks.medium def test_back_forward_refresh_navigation_history_kept_after_relogin(self): @@ -48,142 +47,6 @@ class TestBrowsing(SingleDeviceTestCase): if not element_on_start_page.is_element_displayed(30): self.driver.fail("Page failed to be refreshed") - @marks.testrail_id(6210) - @marks.high - def test_open_blocked_secure_not_secure_inlalid_offline_urls(self): - home = SignInView(self.driver).create_user() - dapp = home.dapp_tab_button.click() - for url in ('metamask.site', 'cryptokitties.domainname'): - dapp.just_fyi('Checking blocked website %s' % url) - dapp_detail = dapp.open_url(url) - dapp_detail.element_by_translation_id('browsing-site-blocked-title') - if dapp_detail.browser_refresh_page_button.is_element_displayed(): - self.errors.append("Refresh button is present in blocked site") - dapp_detail.go_back_button.click() - dapp_detail.open_tabs_button.click() - dapp.element_by_text_part(url[:8]).click() - dapp_detail.continue_anyway_button.click() - if dapp_detail.element_by_text('This site is blocked').is_element_displayed(): - self.errors.append("Failed to open Dapp after 'Continue anyway' tapped for %s" % url) - dapp_detail.open_tabs_button.click() - dapp_detail.empty_tab_button.click() - - dapp.just_fyi('Checking connection is not secure warning') - web_page = dapp.open_url('http://www.dvwa.co.uk') - web_page.url_edit_box_lock_icon.click_until_presence_of_element( - web_page.element_by_translation_id("browser-not-secure")) - dapp_detail.open_tabs_button.click() - dapp_detail.empty_tab_button.click() - - for url in ('https://www.bbc.com', 'https://instant.airswap.io'): - dapp.just_fyi('Checking connection is secure for %s' % url) - web_page = dapp.open_url(url) - web_page.wait_for_d_aap_to_load() - web_page.url_edit_box_lock_icon.click_until_presence_of_element( - web_page.element_by_translation_id("browser-secure")) - dapp_detail.open_tabs_button.click() - dapp_detail.empty_tab_button.click() - - dapp.just_fyi('Checking opening invalid link') - # home.dapp_tab_button.double_click() - browsing_view = dapp.open_url('invalid.takoe') - browsing_view.element_by_translation_id("web-view-error").wait_for_element(20) - browsing_view.dapp_tab_button.double_click() - - dapp.just_fyi('Checking offline state') - home.toggle_airplane_mode() - dapp_detail.open_tabs_button.click() - dapp_detail.empty_tab_button.click() - browsing_view = dapp.open_url('status.im') - offline_texts = ['Unable to load page', 'ERR_INTERNET_DISCONNECTED'] - for text in offline_texts: - browsing_view.element_by_text_part(text).wait_for_element(15) - home.toggle_airplane_mode() - browsing_view.browser_refresh_page_button.click_until_presence_of_element( - browsing_view.element_by_text_part('An Open Source Community')) - - self.errors.verify_no_errors() - - @marks.testrail_id(5390) - @marks.high - def test_delete_close_all_tabs(self): - home_view = SignInView(self.driver).create_user() - dapp_view = home_view.dapp_tab_button.click() - urls = { - 'google.com': 'Google', - 'status.im': 'Status - Private', - 'bbc.com': 'bbc.com' - } - for url in urls: - browsing_view = dapp_view.open_url(url) - browsing_view.open_tabs_button.click() - browsing_view.empty_tab_button.click() - home_view.just_fyi('Close one tab, relogin and check that it is not reappearing') - browsing_view.remove_tab(name=urls['bbc.com']) - home_view.relogin() - home_view.dapp_tab_button.click() - browsing_view.open_tabs_button.click() - if browsing_view.element_by_text_part(urls['bbc.com']).is_element_displayed(): - self.errors.append('Closed tab is present after re-login') - - home_view.just_fyi('Close all tabs via "Close all", relogin and check that it is not reappearing') - browsing_view.close_all_button.click() - home_view.relogin() - home_view.dapp_tab_button.click() - browsing_view.open_tabs_button.click() - for url in urls: - if browsing_view.element_by_text_part(urls[url]).is_element_displayed(): - self.errors.append('Closed tab %s present after re-login after "Close all"' % url) - - self.errors.verify_no_errors() - - @marks.testrail_id(6633) - @marks.high - def test_browser_managing_bookmarks(self): - home_view = SignInView(self.driver).create_user() - dapp_view = home_view.dapp_tab_button.click() - - home_view.just_fyi('Add some url to bookmarks with default name') - browsing_view = dapp_view.open_url('status.im') - default_bookmark_name = browsing_view.add_to_bookmarks() - browsing_view.browser_previous_page_button.click() - if not browsing_view.element_by_text(default_bookmark_name).is_element_displayed(): - self.errors.append("Bookmark with default name is not added!") - - home_view.just_fyi('Add some url to bookmarks with custom name') - custom_name = 'Custom BBC' - dapp_view.open_url('bbc.com') - browsing_view.add_to_bookmarks(custom_name) - browsing_view.open_tabs_button.click() - browsing_view.empty_tab_button.click() - if not browsing_view.element_by_text(custom_name).is_element_displayed(): - self.driver.fail("Bookmark with custom name is not added!") - - home_view.just_fyi('Check deleting bookmark on long tap and that it is deleted after relogin') - dapp_view.browser_entry_long_press(custom_name) - dapp_view.delete_bookmark_button.click() - if browsing_view.element_by_text(custom_name).is_element_displayed(): - self.errors.append("Bookmark with custom name is not deleted!") - profile_view = dapp_view.profile_button.click() - profile_view.relogin() - profile_view.dapp_tab_button.click() - if browsing_view.element_by_text(custom_name).is_element_displayed(): - self.errors.append("Bookmark with custom name is reappeared after relogin!") - - home_view.just_fyi('Check "Edit bookmark" and "Open in new tab"') - edited_name = 'My Fav Status' - dapp_view.browser_entry_long_press(default_bookmark_name) - dapp_view.edit_bookmark_button.click() - browsing_view.edit_bookmark_name(edited_name) - if not browsing_view.element_by_text(edited_name).is_element_displayed(): - self.driver.fail("Edited bookmark name is not shown!") - dapp_view.browser_entry_long_press(edited_name) - dapp_view.open_in_new_tab_button.click() - browsing_view.options_button.click() - if not browsing_view.element_by_translation_id('remove-favourite').is_element_displayed(): - self.errors.append("Remove favourite is not shown on added bookmark!") - self.errors.verify_no_errors() - @marks.testrail_id(5424) @marks.medium def test_open_url_with_non_english_text_connect_revoke_wallet_new_tab_open_chat_options(self): diff --git a/test/appium/tests/atomic/dapps_and_browsing/test_deep_links.py b/test/appium/tests/atomic/dapps_and_browsing/test_deep_links.py index 678fe0247f..f07ffa26b9 100644 --- a/test/appium/tests/atomic/dapps_and_browsing/test_deep_links.py +++ b/test/appium/tests/atomic/dapps_and_browsing/test_deep_links.py @@ -8,7 +8,6 @@ from views.sign_in_view import SignInView class TestDeepLinks(SingleDeviceTestCase): - @marks.testrail_id(5441) @marks.medium def test_open_user_profile_using_deep_link(self): diff --git a/test/appium/tests/atomic/chats/test_public.py b/test/appium/tests/atomic/test_public_chat_browsing.py similarity index 75% rename from test/appium/tests/atomic/chats/test_public.py rename to test/appium/tests/atomic/test_public_chat_browsing.py index 839a05bee6..64984ecbf2 100644 --- a/test/appium/tests/atomic/chats/test_public.py +++ b/test/appium/tests/atomic/test_public_chat_browsing.py @@ -6,14 +6,15 @@ import emoji import pytest from dateutil import parser -from tests import marks -from tests.base_test_case import MultipleDeviceTestCase, SingleDeviceTestCase, create_shared_drivers, \ +from tests import marks, test_dapp_name, test_dapp_url +from tests.base_test_case import MultipleDeviceTestCase, create_shared_drivers, \ MultipleSharedDeviceTestCase from views.sign_in_view import SignInView from selenium.common.exceptions import NoSuchElementException @pytest.mark.xdist_group(name="public_chat_2") +@marks.critical class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): @classmethod @@ -33,8 +34,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): cls.chat_1.send_message(cls.text_message) @marks.testrail_id(5313) - @marks.critical - def test_public_message_send_check_timestamps_while_on_different_tab(self): + def test_public_chat_message_send_check_timestamps_while_on_different_tab(self): message = self.text_message self.chat_2.dapp_tab_button.click() sent_time_variants = self.chat_1.convert_device_time_to_chat_timestamp() @@ -49,8 +49,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700734) - @marks.critical - def test_public_message_edit(self): + def test_public_chat_message_edit(self): message_before_edit, message_after_edit = self.text_message, "Message AFTER edit 2" self.chat_1.edit_message_in_chat(message_before_edit, message_after_edit) for chat in (self.chat_1, self.chat_2): @@ -61,8 +60,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700735) - @marks.critical - def test_public_message_delete(self): + def test_public_chat_message_delete(self): message_to_delete = 'delete me, please' self.chat_1.send_message(message_to_delete) self.chat_1.delete_message_in_chat(message_to_delete) @@ -72,8 +70,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700719) - @marks.critical - def test_public_emoji_send_copy_paste_reply(self): + def test_public_chat_emoji_send_copy_paste_reply(self): emoji_name = random.choice(list(emoji.EMOJI_UNICODE)) emoji_unicode = emoji.EMOJI_UNICODE[emoji_name] emoji_message = emoji.emojize(emoji_name) @@ -100,8 +97,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(5360) - @marks.critical - def test_public_unread_messages_counter(self): + def test_public_chat_unread_messages_counter(self): self.chat_1.send_message('пиу') home_1 = self.chat_1.home_button.click() message = 'test message' @@ -114,8 +110,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700718) - @marks.critical - def test_public_unread_messages_counter_for_mentions_relogin(self): + def test_public_chat_unread_messages_counter_for_mention_relogin(self): message = 'test message2' [chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)] chat_element = self.home_1.get_chat('#' + self.public_chat_name) @@ -140,8 +135,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(5319) - @marks.critical - def test_public_delete_chat_long_press(self): + def test_public_chat_delete_chat_long_press(self): [chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)] self.home_1.delete_chat_long_press('#%s' % self.pub_chat_delete_long_press) self.home_2.just_fyi("Send message to deleted chat") @@ -154,8 +148,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.drivers[0].fail('Deleted public chat reappears after relogin') @marks.testrail_id(700736) - @marks.critical - def test_public_link_send_open(self): + def test_public_chat_link_send_open(self): [chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)] [home.get_chat('#' + self.public_chat_name).click() for home in (self.home_1, self.home_2)] url_message = 'http://status.im' @@ -166,8 +159,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.drivers[0].fail('URL was not opened from public chat') @marks.testrail_id(700737) - @marks.critical - def test_public_links_with_previews_github_youtube_twitter_gif_send_enable(self): + def test_public_chat_links_with_previews_github_youtube_twitter_gif_send_enable(self): [chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)] [home.get_chat('#' + self.public_chat_name).click() for home in (self.home_1, self.home_2)] giphy_url = 'https://giphy.com/gifs/this-is-fine-QMHoU66sBXqqLqYvGO' @@ -210,8 +202,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(6270) - @marks.critical - def test_public_mark_all_messages_as_read(self): + def test_public_chat_mark_all_messages_as_read(self): [chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)] self.home_2.get_chat('#' + self.public_chat_name).click() self.chat_2.send_message(self.text_message) @@ -231,8 +222,9 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() -@pytest.mark.xdist_group(name="public_chat_1") -class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase): +@pytest.mark.xdist_group(name="public_chat_browser_1") +@marks.critical +class TestPublicChatBrowserOneDeviceMerged(MultipleSharedDeviceTestCase): @classmethod def setup_class(cls): @@ -244,8 +236,7 @@ class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase): cls.chat = cls.home.join_public_chat(cls.public_chat_name) @marks.testrail_id(5675) - @marks.critical - def test_public_fetch_more_history(self): + def test_public_chat_fetch_more_history(self): self.home.just_fyi("Check that can fetch previous history for several days") device_time = parser.parse(self.drivers[0].device_time) yesterday = (device_time - timedelta(days=1)).strftime("%b %-d, %Y") @@ -287,8 +278,7 @@ class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(5396) - @marks.critical - def test_public_navigate_to_chat_when_relaunch(self): + def test_public_chat_navigate_to_chat_when_relaunch(self): text_message = 'some_text' self.home.home_button.double_click() self.home.get_chat('#%s' % self.public_chat_name).click() @@ -298,8 +288,7 @@ class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase): self.drivers[0].fail("Not navigated to chat view after reopening app") @marks.testrail_id(700738) - @marks.critical - def test_public_tag_message(self): + def test_public_chat_tag_message(self): tag_message = '#wuuut' self.home.home_button.double_click() self.home.get_chat('#%s' % self.public_chat_name).click() @@ -316,7 +305,6 @@ class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700739) - @marks.critical def test_public_chat_open_using_deep_link(self): self.drivers[0].close_app() chat_name = self.home.get_random_chat_name() @@ -327,6 +315,164 @@ class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase): except (AssertionError, NoSuchElementException): self.driver.fail("Public chat '%s' is not opened" % chat_name) + @marks.testrail_id(702072) + def test_browser_blocked_url(self): + dapp = self.home.dapp_tab_button.click() + for url in ('metamask.site', 'cryptokitties.domainname'): + dapp.just_fyi('Checking blocked website %s' % url) + dapp_detail = dapp.open_url(url) + dapp_detail.element_by_translation_id('browsing-site-blocked-title') + if dapp_detail.browser_refresh_page_button.is_element_displayed(): + self.errors.append("Refresh button is present in blocked site") + dapp_detail.go_back_button.click() + dapp_detail.open_tabs_button.click() + dapp.element_by_text_part(url[:8]).click() + dapp_detail.continue_anyway_button.click() + if dapp_detail.element_by_text('This site is blocked').is_element_displayed(): + self.errors.append("Failed to open Dapp after 'Continue anyway' tapped for %s" % url) + dapp_detail.open_tabs_button.click() + dapp_detail.empty_tab_button.click() + self.errors.verify_no_errors() + + @marks.testrail_id(702073) + def test_browser_connection_is_secure_not_secure_warning(self): + dapp = self.home.dapp_tab_button.click() + web_page = dapp.open_url('http://www.dvwa.co.uk') + web_page.url_edit_box_lock_icon.click_until_presence_of_element( + web_page.element_by_translation_id("browser-not-secure")) + web_page.open_tabs_button.click() + web_page.empty_tab_button.click() + dapp.just_fyi('Checking connection is secure for Airswap') + web_page = dapp.open_url('https://instant.airswap.io') + web_page.wait_for_d_aap_to_load() + web_page.url_edit_box_lock_icon.click_until_presence_of_element( + web_page.element_by_translation_id("browser-secure")) + web_page.open_tabs_button.click() + web_page.empty_tab_button.click() + + @marks.testrail_id(702074) + def test_browser_invalid_url(self): + dapp = self.home.dapp_tab_button.click() + browsing_view = dapp.open_url('invalid.takoe') + browsing_view.element_by_translation_id("web-view-error").wait_for_element(20) + + @marks.testrail_id(702075) + def test_browser_offline(self): + dapp = self.home.dapp_tab_button.click() + self.home.toggle_airplane_mode() + browsing_view = dapp.open_url('status.im') + offline_texts = ['Unable to load page', 'ERR_INTERNET_DISCONNECTED'] + for text in offline_texts: + browsing_view.element_by_text_part(text).wait_for_element(15) + self.home.toggle_airplane_mode() + browsing_view.browser_refresh_page_button.click_until_presence_of_element( + browsing_view.element_by_text_part('An Open Source Community')) + + @marks.testrail_id(702076) + def test_browser_delete_close_tabs(self): + dapp = self.home.dapp_tab_button.click() + urls = { + 'google.com': 'Google', + 'status.im': 'Status - Private', + 'bbc.com': 'bbc.com' + } + for url in urls: + web_page = dapp.open_url(url) + web_page.open_tabs_button.click() + web_page.empty_tab_button.click() + + self.home.just_fyi('Delete one tab') + web_page.remove_tab(name=urls['bbc.com']) + if web_page.element_by_text_part(urls['bbc.com']).is_element_displayed(): + self.errors.append('Closed tab is present after deletion') + + self.home.just_fyi('Close all tabs via "Close all", relogin and check that it is not reappearing') + web_page.close_all_button.click() + self.home.reopen_app() + web_page.dapp_tab_button.click() + web_page.open_tabs_button.click() + if web_page.element_by_text_part(urls['status.im']).is_element_displayed(): + self.errors.append('Tabs are not closed or reappeared after re-login!') + + self.errors.verify_no_errors() + + @marks.testrail_id(702077) + def test_browser_bookmarks_create_edit_remove(self): + dapp = self.home.dapp_tab_button.click() + + self.home.just_fyi('Add some url to bookmarks with default name') + web_page = dapp.open_url('status.im') + default_bookmark_name = web_page.add_to_bookmarks() + web_page.browser_previous_page_button.click() + if not web_page.element_by_text(default_bookmark_name).is_element_displayed(): + self.errors.append("Bookmark with default name is not added!") + + self.home.just_fyi('Add some url to bookmarks with custom name') + custom_name = 'Custom BBC' + dapp.open_url('bbc.com') + web_page.add_to_bookmarks(custom_name) + web_page.open_tabs_button.click() + web_page.empty_tab_button.click() + if not web_page.element_by_text(custom_name).is_element_displayed(): + self.driver.fail("Bookmark with custom name is not added!") + + self.home.just_fyi('Checking "Open in new tab"') + dapp.browser_entry_long_press(custom_name) + dapp.open_in_new_tab_button.click() + web_page.options_button.click() + if not web_page.element_by_translation_id('remove-favourite').is_element_displayed(): + self.errors.append("Remove favourite is not shown on added bookmark!") + dapp.click_system_back_button() + + self.home.just_fyi('Check deleting bookmark') + web_page.open_tabs_button.click() + web_page.empty_tab_button.click() + dapp.browser_entry_long_press(custom_name) + dapp.delete_bookmark_button.click() + if web_page.element_by_text(custom_name).is_element_displayed(): + self.errors.append("Bookmark with custom name is not deleted!") + + self.home.just_fyi('Check "Edit bookmark" and "Open in new tab"') + edited_name = 'My Fav Status' + dapp.browser_entry_long_press(default_bookmark_name) + dapp.edit_bookmark_button.click() + web_page.edit_bookmark_name(edited_name) + if not web_page.element_by_text(edited_name).is_element_displayed(): + self.driver.fail("Edited bookmark name is not shown!") + + self.errors.verify_no_errors() + + @marks.testrail_id(702078) + def test_browser_web3_permissions_testdapp(self): + self.home.home_button.double_click() + + self.home.just_fyi('open Status Test Dapp, allow all and check permissions in Profile') + web_view = self.home.open_status_test_dapp() + dapp = self.home.dapp_tab_button.click() + profile = self.home.profile_button.click() + profile.privacy_and_security_button.click() + profile.dapp_permissions_button.click() + profile.element_by_text(test_dapp_name).click() + if not profile.element_by_text(self.home.status_account_name).is_element_displayed(): + self.errors.append('Wallet permission was not granted') + if not profile.element_by_translation_id("chat-key").is_element_displayed(): + self.errors.append('Contact code permission was not granted') + + profile.just_fyi('revoke access and check that they are asked second time') + profile.revoke_access_button.click() + profile.back_button.click() + profile.dapp_tab_button.click() + web_view.open_tabs_button.click() + web_view.empty_tab_button.click() + dapp.open_url(test_dapp_url) + if not dapp.element_by_text_part(self.home.status_account_name).is_element_displayed(): + self.errors.append('Wallet permission is not asked') + if dapp.allow_button.is_element_displayed(): + dapp.allow_button.click(times_to_click=1) + if not dapp.element_by_translation_id("your-contact-code").is_element_displayed(): + self.errors.append('Profile permission is not asked') + self.errors.verify_no_errors() + class TestPublicChatMultipleDevice(MultipleDeviceTestCase): diff --git a/test/appium/tests/atomic/transactions/test_dapps_transactions.py b/test/appium/tests/atomic/transactions/test_dapps_transactions.py deleted file mode 100644 index c814959cf7..0000000000 --- a/test/appium/tests/atomic/transactions/test_dapps_transactions.py +++ /dev/null @@ -1,127 +0,0 @@ -from tests import marks, unique_password, common_password -from tests.base_test_case import SingleDeviceTestCase -from tests.users import transaction_senders -from views.sign_in_view import SignInView - - -class TestTransactionDApp(SingleDeviceTestCase): - - @marks.testrail_id(5309) - @marks.critical - @marks.transaction - def test_request_stt_from_dapp(self): - sender = transaction_senders['ETH_STT_4'] - home = SignInView(self.driver).recover_access(sender['passphrase'], unique_password) - wallet = home.wallet_button.click() - wallet.scan_tokens() - initial_amount_stt = wallet.get_asset_amount_by_name('STT') - status_test_dapp = home.open_status_test_dapp() - status_test_dapp.wait_for_d_aap_to_load() - status_test_dapp.assets_button.click() - status_test_dapp.request_stt_button.wait_for_element(60) - send_transaction = status_test_dapp.request_stt_button.click() - if not send_transaction.onboarding_message.is_element_displayed(30): - self.driver.fail('It seems onboarding screen is not shown.') - home.ok_got_it_button.click() - home.cancel_button.click() - send_transaction = status_test_dapp.request_stt_button.click() - send_transaction.sign_transaction(unique_password) - status_test_dapp.wallet_button.click() - - send_transaction.just_fyi('Verify that wallet balance is updated') - wallet.wait_balance_is_changed('STT', initial_amount_stt, scan_tokens=True) - - send_transaction.just_fyi('Check logcat for sensitive data') - values_in_logcat = send_transaction.find_values_in_logcat(password=unique_password) - if values_in_logcat: - self.driver.fail(values_in_logcat) - - @marks.testrail_id(5342) - @marks.critical - @marks.transaction - def test_sign_message_and_2tx_in_batch_and_transactions_filters_from_daap(self): - password = 'password_for_daap' - home = SignInView(self.driver).recover_access(passphrase=transaction_senders['ETH_9']['passphrase'], - password=password) - wallet = home.wallet_button.click() - - status_test_dapp = home.open_status_test_dapp() - status_test_dapp.wait_for_d_aap_to_load() - status_test_dapp.transactions_button.click() - - wallet.just_fyi("Checking signing message") - send_transaction = status_test_dapp.sign_message_button.click() - status_test_dapp.set_up_wallet_when_sending_tx() - if not send_transaction.element_by_text("Test message").is_element_displayed(): - self.errors.append("No message shown when signing!") - send_transaction.enter_password_input.send_keys(password) - send_transaction.sign_button.click() - if not status_test_dapp.element_by_text_part('Signed message').is_element_displayed(): - self.errors.append('Message was not signed') - send_transaction.just_fyi('Check logcat for sensitive data') - values_in_logcat = send_transaction.find_values_in_logcat(password=password) - if values_in_logcat: - self.errors.append("When signing message from dapp: %s" % values_in_logcat) - - wallet.just_fyi("Checking send 2 txs in batch") - status_test_dapp.send_two_tx_in_batch_button.scroll_to_element() - send_transaction = status_test_dapp.send_two_tx_in_batch_button.click() - send_transaction.sign_transaction(password) - if not send_transaction.sign_with_password.is_element_displayed(10): - self.driver.fail('Second send transaction screen did not appear!') - send_transaction.sign_transaction(password) - - wallet.just_fyi("Checking send 2 txs one after another") - status_test_dapp.send_two_tx_one_by_one_button.scroll_to_element() - send_transaction = status_test_dapp.send_two_tx_one_by_one_button.click() - send_transaction.sign_transaction(password) - if not send_transaction.sign_with_password.is_element_displayed(20): - self.driver.fail('Second send transaction screen did not appear!') - send_transaction.sign_transaction(password) - - wallet.just_fyi("Checking test filters") - status_test_dapp.test_filters_button.scroll_and_click() - for element in status_test_dapp.element_by_text('eth_uninstallFilter'), status_test_dapp.ok_button: - if element.is_element_displayed(10): - self.driver.fail("'Test filters' button produced an error") - self.errors.verify_no_errors() - - @marks.testrail_id(5784) - @marks.medium - @marks.transaction - def test_sign_typed_message_deploy_simple_contract_request_pub_key_from_dapp(self): - user = transaction_senders['ETH_5'] - home = SignInView(self.driver).recover_access(passphrase=user['passphrase']) - - home.just_fyi("Checking requesting public key from dapp") - status_test_dapp = home.open_status_test_dapp(allow_all=False) - status_test_dapp.status_api_button.click_until_presence_of_element(status_test_dapp.request_contact_code_button) - status_test_dapp.request_contact_code_button.click_until_presence_of_element(status_test_dapp.deny_button) - status_test_dapp.deny_button.click() - if status_test_dapp.element_by_text(user['public_key']).is_element_displayed(): - self.errors.append('Public key is returned but access was not allowed') - status_test_dapp.request_contact_code_button.click_until_presence_of_element(status_test_dapp.deny_button) - status_test_dapp.allow_button.click() - if not status_test_dapp.element_by_text(user['public_key']).is_element_displayed(): - self.errors.append('Public key is not returned') - status_test_dapp.get_empty_dapp_tab() - home.wallet_button.click() - - home.just_fyi("Checking sign typed message") - home.open_status_test_dapp(allow_all=True) - status_test_dapp.transactions_button.click_until_presence_of_element(status_test_dapp.sign_typed_message_button) - send_transaction = status_test_dapp.sign_typed_message_button.click() - send_transaction.enter_password_input.send_keys(common_password) - send_transaction.sign_button.click_until_absense_of_element(send_transaction.sign_button) - if not status_test_dapp.element_by_text_part('0x1673d96e836').is_element_displayed(30): - self.errors.append("Hash of signed typed message is not shown!") - - home.just_fyi("Checking deploy simple contract") - send_transaction = status_test_dapp.deploy_contract_button.click() - send_transaction.sign_transaction() - if not status_test_dapp.element_by_text('Contract deployed at: ').is_element_displayed(240): - self.errors.append('Contract was not created') - for text in ['Call contract get function', - 'Call contract set function', 'Call function 2 times in a row']: - status_test_dapp.element_by_text(text).scroll_to_element() - self.errors.verify_no_errors() diff --git a/test/appium/tests/atomic/transactions/test_keycard_wallet.py b/test/appium/tests/atomic/transactions/test_keycard_wallet.py index 5e9a002266..38fd1c9555 100644 --- a/test/appium/tests/atomic/transactions/test_keycard_wallet.py +++ b/test/appium/tests/atomic/transactions/test_keycard_wallet.py @@ -7,6 +7,7 @@ from views.sign_in_view import SignInView @pytest.mark.xdist_group(name="keycard_tx_1") +@marks.critical class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase): @classmethod def setup_class(cls): @@ -24,7 +25,6 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase): cls.initial_balances[asset] = cls.wallet.get_asset_amount_by_name(asset) @marks.testrail_id(700767) - @marks.critical def test_keycard_send_tx_eth(self): wallet = self.home.wallet_button.click() transaction_amount = wallet.get_unique_amount() @@ -39,7 +39,6 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase): self.wallet.wait_balance_is_changed('ETH', initial_balance=self.initial_balances['ETH']) @marks.testrail_id(700768) - @marks.critical def test_keycard_relogin_after_restore(self): self.sign_in.just_fyi('Check that username and public key match expected') public_key, default_username = self.sign_in.get_public_key_and_username(return_username=True) @@ -58,7 +57,6 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700769) - @marks.critical @marks.transaction def test_keycard_send_tx_sign_message_request_stt_testdapp(self): self.home.home_button.double_click() @@ -107,7 +105,6 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700770) - @marks.critical def test_keycard_wallet_recover_pairing_check_balance_after_offline_tx_history(self): user = transaction_senders['A'] self.sign_in.toggle_airplane_mode() @@ -156,6 +153,73 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase): transactions_details.close_button.click() self.errors.verify_no_errors() + @marks.testrail_id(5689) + def test_keycard_create_account_unlock_same_seed(self): + self.sign_in.driver.reset() + self.sign_in.just_fyi("Create keycard account and save seed phrase") + self.sign_in.accept_tos_checkbox.enable() + self.sign_in.get_started_button.click() + self.sign_in.generate_key_button.click_until_presence_of_element(self.sign_in.next_button) + self.sign_in.next_button.click_until_absense_of_element(self.sign_in.element_by_translation_id("intro-wizard-title2")) + keycard_flow = self.sign_in.keycard_storage_button.click() + keycard_flow.confirm_pin_and_proceed() + seed_phrase = keycard_flow.backup_seed_phrase() + self.sign_in.maybe_later_button.wait_for_visibility_of_element(30) + self.sign_in.maybe_later_button.click_until_presence_of_element(self.sign_in.lets_go_button) + self.sign_in.lets_go_button.click_until_absense_of_element(self.sign_in.lets_go_button) + self.sign_in.profile_button.wait_for_visibility_of_element(30) + + self.sign_in.just_fyi('Check that after creating keycard account balance is 0, not ...') + wallet_1 = self.sign_in.wallet_button.click() + wallet_address = wallet_1.get_wallet_address() + wallet_1.wallet_button.double_click() + if wallet_1.status_account_total_usd_value.text != '0': + self.errors.append("Account USD value is not 0, it is %s" % wallet_1.status_account_total_usd_value.text) + public_key, default_username = self.sign_in.get_public_key_and_username(return_username=True) + profile_1 = self.sign_in.get_profile_view() + profile_1.logout() + + profile_1.just_fyi('Check that can re-login with keycard account after account creation') + self.sign_in.multi_account_on_login_button.wait_for_visibility_of_element(5) + self.sign_in.multi_account_on_login_button.click() + if not keycard_flow.element_by_text_part(default_username).is_element_displayed(): + self.errors.append("%s is not found on keycard login screen!" % default_username) + keycard_flow.enter_default_pin() + if not self.sign_in.home_button.is_element_displayed(10): + self.errors.append('Keycard user is not logged in') + + self.sign_in.just_fyi('Unlock keycard multiaccount at attempt to restore same multiaccount from seed') + self.sign_in.profile_button.click() + profile_1.logout() + self.sign_in.access_key_button.click() + self.sign_in.enter_seed_phrase_button.click() + self.sign_in.seedphrase_input.click() + self.sign_in.seedphrase_input.set_value(seed_phrase) + self.sign_in.next_button.click() + self.sign_in.element_by_translation_id("unlock", uppercase=True).click() + keycard_flow.enter_default_pin() + device_1_home = self.sign_in.home_button.click() + device_1_home.plus_button.click() + if not device_1_home.start_new_chat_button.is_element_displayed(): + self.errors.append("Can't proceed using account after it's re-recover twice.") + + self.sign_in.just_fyi("Restore same multiaccount from backed up seed phrase on another device") + self.sign_in.driver.reset() + self.sign_in.recover_access(seed_phrase) + + self.sign_in.just_fyi("Check username and wallet address on restored account") + wallet_2 = self.sign_in.wallet_button.click() + wallet_address_2 = wallet_2.get_wallet_address() + wallet_2.wallet_button.double_click() + if wallet_address != wallet_address_2: + self.errors.append('Wallet address on restored multiaccount is not equal to created keycard multiaccount') + public_key_2, default_username_2 = self.sign_in.get_public_key_and_username(return_username=True) + if public_key != public_key_2: + self.errors.append('Public key on restored multiaccount is not equal to created keycard multiaccount') + if default_username_2 != default_username: + self.errors.append('Username on restored multiaccount is not equal to created keycard multiaccount') + self.errors.verify_no_errors() + class TestTransactionWalletSingleDevice(SingleDeviceTestCase): diff --git a/test/appium/tests/atomic/transactions/test_wallet.py b/test/appium/tests/atomic/transactions/test_wallet_dapp_tx.py similarity index 87% rename from test/appium/tests/atomic/transactions/test_wallet.py rename to test/appium/tests/atomic/transactions/test_wallet_dapp_tx.py index 21e19a87f4..0f67eb8425 100644 --- a/test/appium/tests/atomic/transactions/test_wallet.py +++ b/test/appium/tests/atomic/transactions/test_wallet_dapp_tx.py @@ -3,13 +3,15 @@ import string import pytest from tests import marks, common_password -from tests.base_test_case import SingleDeviceTestCase, MultipleDeviceTestCase, MultipleSharedDeviceTestCase, create_shared_drivers -from tests.users import transaction_senders, basic_user, wallet_users, ens_user_ropsten, ens_user, transaction_recipients +from tests.base_test_case import SingleDeviceTestCase, MultipleDeviceTestCase, MultipleSharedDeviceTestCase,\ + create_shared_drivers +from tests.users import transaction_senders, basic_user, wallet_users, ens_user_ropsten, ens_user from views.send_transaction_view import SendTransactionView from views.sign_in_view import SignInView @pytest.mark.xdist_group(name="send_tx_1") +@marks.critical class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase): @classmethod def setup_class(cls): @@ -29,7 +31,6 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase): cls.wallet.send_transaction(amount=cls.amount_adi, recipient=cls.recipient_address, asset_name='ADI') @marks.testrail_id(700763) - @marks.critical @marks.transaction def test_send_tx_eth_check_logcat(self): self.wallet.just_fyi('Check that transaction is appeared in tx history') @@ -44,7 +45,6 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase): self.wallet.driver.fail(values_in_logcat) @marks.testrail_id(700764) - @marks.critical @marks.transaction def test_send_tx_token_7_decimals(self): asset = 'ADI' @@ -54,8 +54,56 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase): self.network_api.find_transaction_by_hash(transaction_adi) self.wallet.wait_balance_is_changed(asset, initial_balance=self.initial_balances[asset]) + @marks.testrail_id(5342) + @marks.transaction + def test_send_tx_sign_message_2tx_in_batch_tx_filters_request_stt_testdapp(self): + self.wallet.home_button.click() + status_test_dapp = self.home.open_status_test_dapp() + status_test_dapp.wait_for_d_aap_to_load() + + self.wallet.just_fyi("Checking request STT") + status_test_dapp.assets_button.click() + status_test_dapp.request_stt_button.wait_for_element(60) + send_transaction = status_test_dapp.request_stt_button.click() + send_transaction.sign_transaction() + + self.wallet.just_fyi("Checking signing message") + status_test_dapp.transactions_button.click() + send_transaction = status_test_dapp.sign_message_button.click() + send_transaction.enter_password_input.set_value(common_password) + send_transaction.sign_button.click() + if not status_test_dapp.element_by_text_part('Signed message').is_element_displayed(): + self.errors.append('Message was not signed') + + send_transaction.just_fyi('Check logcat for sensitive data') + values_in_logcat = send_transaction.find_values_in_logcat(password=common_password) + if values_in_logcat: + self.errors.append("When signing message from dapp: %s" % values_in_logcat) + + self.wallet.just_fyi("Checking send 2 txs in batch") + status_test_dapp.send_two_tx_in_batch_button.scroll_to_element() + send_transaction = status_test_dapp.send_two_tx_in_batch_button.click() + send_transaction.sign_transaction() + if not send_transaction.sign_with_password.is_element_displayed(10): + self.errors.append('Second send transaction screen did not appear!') + send_transaction.sign_transaction() + + self.wallet.just_fyi("Checking send 2 txs one after another") + status_test_dapp.send_two_tx_one_by_one_button.scroll_to_element() + send_transaction = status_test_dapp.send_two_tx_one_by_one_button.click() + send_transaction.sign_transaction() + if not send_transaction.sign_with_password.is_element_displayed(20): + self.errors.append('Second send transaction screen did not appear!') + send_transaction.sign_transaction() + + self.wallet.just_fyi("Checking test filters") + status_test_dapp.test_filters_button.scroll_and_click() + for element in status_test_dapp.element_by_text('eth_uninstallFilter'), status_test_dapp.ok_button: + if element.is_element_displayed(10): + self.errors.append("'Test filters' button produced an error") + self.errors.verify_no_errors() + @marks.testrail_id(700765) - @marks.critical @marks.transaction def test_send_tx_custom_token_18_decimals_invalid_password(self): contract_address, name, symbol, decimals = '0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA', 'Weenus 💪', 'WEENUS', '18' @@ -116,7 +164,6 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700757) - @marks.critical def test_send_tx_set_recipient_options(self): nickname = 'my_some_nickname' account_name = 'my_acc_name' @@ -224,6 +271,46 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase): class TestTransactionWalletSingleDevice(SingleDeviceTestCase): + @marks.testrail_id(5784) + @marks.medium + @marks.transaction + def test_sign_typed_message_deploy_simple_contract_request_pub_key_from_dapp(self): + user = transaction_senders['ETH_5'] + home = SignInView(self.driver).recover_access(passphrase=user['passphrase']) + + home.just_fyi("Checking requesting public key from dapp") + status_test_dapp = home.open_status_test_dapp(allow_all=False) + status_test_dapp.status_api_button.click_until_presence_of_element(status_test_dapp.request_contact_code_button) + status_test_dapp.request_contact_code_button.click_until_presence_of_element(status_test_dapp.deny_button) + status_test_dapp.deny_button.click() + if status_test_dapp.element_by_text(user['public_key']).is_element_displayed(): + self.errors.append('Public key is returned but access was not allowed') + status_test_dapp.request_contact_code_button.click_until_presence_of_element(status_test_dapp.deny_button) + status_test_dapp.allow_button.click() + if not status_test_dapp.element_by_text(user['public_key']).is_element_displayed(): + self.errors.append('Public key is not returned') + status_test_dapp.get_empty_dapp_tab() + home.wallet_button.click() + + home.just_fyi("Checking sign typed message") + home.open_status_test_dapp(allow_all=True) + status_test_dapp.transactions_button.click_until_presence_of_element(status_test_dapp.sign_typed_message_button) + send_transaction = status_test_dapp.sign_typed_message_button.click() + send_transaction.enter_password_input.send_keys(common_password) + send_transaction.sign_button.click_until_absense_of_element(send_transaction.sign_button) + if not status_test_dapp.element_by_text_part('0x1673d96e836').is_element_displayed(30): + self.errors.append("Hash of signed typed message is not shown!") + + home.just_fyi("Checking deploy simple contract") + send_transaction = status_test_dapp.deploy_contract_button.click() + send_transaction.sign_transaction() + if not status_test_dapp.element_by_text('Contract deployed at: ').is_element_displayed(240): + self.errors.append('Contract was not created') + for text in ['Call contract get function', + 'Call contract set function', 'Call function 2 times in a row']: + status_test_dapp.element_by_text(text).scroll_to_element() + self.errors.verify_no_errors() + @marks.testrail_id(5429) @marks.medium def test_set_currency(self): diff --git a/test/appium/tests/atomic/zzz_multiple_drivers_tests/test_multiple_driver_tests.py b/test/appium/tests/atomic/zzz_multiple_drivers_tests/test_multiple_driver_tests.py index 16b85e2e77..0a6d4890f5 100644 --- a/test/appium/tests/atomic/zzz_multiple_drivers_tests/test_multiple_driver_tests.py +++ b/test/appium/tests/atomic/zzz_multiple_drivers_tests/test_multiple_driver_tests.py @@ -8,6 +8,7 @@ from views.chat_view import ChatView # TODO: moved here until resolve of 13048 @pytest.mark.xdist_group(name="group_chat_3") +@marks.critical class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): @classmethod @@ -41,8 +42,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): cls.chats[0].send_message(cls.message_before_adding) @marks.testrail_id(3994) - @marks.critical - def test_group_pn_system_messages_when_invited(self): + def test_group_chat_push_system_messages_when_invited(self): self.homes[1].just_fyi("Check system messages in PNs") self.homes[1].put_app_to_background() self.homes[1].open_notification_bar() @@ -73,8 +73,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700731) - @marks.critical - def test_group_join_send_text_messages_pn(self): + def test_group_chat_join_send_text_messages_push(self): message_to_admin = self.message_to_admin [self.homes[i].home_button.double_click() for i in range(3)] self.homes[1].get_chat(self.chat_name).click() @@ -105,8 +104,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700732) - @marks.critical - def test_group_add_new_member_activity_centre(self): + def test_group_chat_add_new_member_activity_centre(self): [self.homes[i].home_button.double_click() for i in range(3)] self.homes[0].get_chat(self.chat_name).click() self.chats[0].add_members_to_group_chat([self.usernames[2]]) @@ -126,8 +124,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(3998) - @marks.critical - def test_group_offline_pn(self): + def test_group_chat_offline_pn(self): [self.homes[i].home_button.double_click() for i in range(3)] chat_name = 'for_offline_pn' self.homes[0].create_group_chat([self.usernames[1], self.usernames[2]], chat_name) @@ -163,8 +160,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(5756) - @marks.critical - def test_group_decline_invite_chat_highligted(self): + def test_group_chat_decline_invite_chat_highligted(self): chat_name = 'for_invited' left_system_message = self.chats[0].leave_system_message(self.usernames[1]) [self.homes[i].home_button.double_click() for i in range(3)] @@ -193,8 +189,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(3997) - @marks.critical - def test_group_leave_relogin(self): + def test_group_chat_leave_relogin(self): self.drivers[2].quit() [self.homes[i].home_button.double_click() for i in range(2)] self.homes[0].home_button.double_click() diff --git a/test/appium/views/dapps_view.py b/test/appium/views/dapps_view.py index 8a261ba63d..58b58b2fe0 100644 --- a/test/appium/views/dapps_view.py +++ b/test/appium/views/dapps_view.py @@ -58,8 +58,8 @@ class DappsView(BaseView): from views.web_views.base_web_view import BaseWebView web_view = BaseWebView(self.driver) if not self.enter_url_editbox.is_element_displayed(): - web_view.open_tabs_button.wait_and_click() - web_view.open_new_tab_plus_button.click() + web_view.open_tabs_button.click_if_shown() + web_view.open_new_tab_plus_button.click_if_shown() self.enter_url_editbox.wait_for_visibility_of_element(20) self.enter_url_editbox.click() self.enter_url_editbox.send_keys(url) diff --git a/test/appium/views/web_views/base_web_view.py b/test/appium/views/web_views/base_web_view.py index abd4ac174e..022a197e25 100644 --- a/test/appium/views/web_views/base_web_view.py +++ b/test/appium/views/web_views/base_web_view.py @@ -63,7 +63,7 @@ class BaseWebView(BaseView): self.driver.info("Closing all tabs") self.close_all_button.click() else: - self.driver.info("Removing '%s' from recent websites") + self.driver.info("Removing '%s' from recent websites" % name) close_button = Button(self.driver, xpath="//*[contains(@text, '%s')]/../../../../*[@content-desc='empty-tab']" % name) close_button.scroll_to_element()