From d31ed933a0a1d018f04dbeaae674562ff11ee41b Mon Sep 17 00:00:00 2001 From: Churikova Tetiana Date: Wed, 27 Jan 2021 17:13:47 +0100 Subject: [PATCH] e2e: reduce amount, continue review Signed-off-by: Churikova Tetiana --- test/appium/tests/__init__.py | 12 - .../atomic/account_management/test_profile.py | 788 +++++++++--------- .../atomic/chats/test_chats_management.py | 28 +- .../dapps_and_browsing/test_browsing.py | 37 +- test/appium/views/base_element.py | 4 + 5 files changed, 419 insertions(+), 450 deletions(-) diff --git a/test/appium/tests/__init__.py b/test/appium/tests/__init__.py index c8c9ec5190..1166919162 100644 --- a/test/appium/tests/__init__.py +++ b/test/appium/tests/__init__.py @@ -48,18 +48,6 @@ geth_log_emulator_path = '/storage/emulated/0/Android/data/im.status.ethereum/fi mailserver_ams = 'mail-01.do-ams3' mailserver_hk = 'mail-01.ac-cn-hongkong-c' mailserver_gc = 'mail-01.gc-us-central1-a' -mailserver_ams_01 = 'mail-01.do-ams3.{}'.format(used_fleet) -camera_access_error_text = "To grant the required camera permission, please go to your system settings " \ - "and make sure that Status > Camera is selected." - -photos_access_error_text = "Access to external storage is denied" -delete_alert_text = "Warning: If you don’t have your seed phrase written down, you will lose access to your funds after you delete your profile" - -connection_not_secure_text = "Connection is not secure! " \ - "Do not sign transactions or send personal data on this site." -connection_is_secure_text = "Connection is secure. Make sure you really trust this site " \ - "before signing transactions or entering personal data." -recorded_error = "You have to give permission to send audio messages" test_dapp_web_url = "status-im.github.io/dapp" test_dapp_url = 'simpledapp.eth' diff --git a/test/appium/tests/atomic/account_management/test_profile.py b/test/appium/tests/atomic/account_management/test_profile.py index e91e3c91da..0755f4d696 100644 --- a/test/appium/tests/atomic/account_management/test_profile.py +++ b/test/appium/tests/atomic/account_management/test_profile.py @@ -1,8 +1,7 @@ import re -from tests import marks, bootnode_address, mailserver_address, camera_access_error_text, \ - photos_access_error_text, test_dapp_url, test_dapp_name, mailserver_ams, mailserver_gc, \ - mailserver_hk, used_fleet, common_password, delete_alert_text +from tests import marks, bootnode_address, mailserver_address, test_dapp_url, test_dapp_name, mailserver_ams, \ + mailserver_gc, mailserver_hk, used_fleet, common_password from tests.base_test_case import SingleDeviceTestCase, MultipleDeviceTestCase from tests.users import transaction_senders, basic_user, ens_user, ens_user_ropsten from views.sign_in_view import SignInView @@ -11,25 +10,12 @@ from time import time class TestProfileSingleDevice(SingleDeviceTestCase): - @marks.testrail_id(5302) - @marks.high - @marks.skip - def test_set_profile_picture(self): - sign_in_view = SignInView(self.driver) - sign_in_view.create_user() - profile_view = sign_in_view.profile_button.click() - profile_view.edit_profile_picture(file_name='sauce_logo.png') - profile_view.home_button.click() - sign_in_view.profile_button.click() - profile_view.swipe_down() - if not profile_view.profile_picture.is_element_image_equals_template('sauce_logo_profile.png'): - self.driver.fail('Profile picture was not updated') - @marks.testrail_id(6318) @marks.medium def test_can_delete_several_multiaccounts(self): sign_in = SignInView(self.driver) sign_in.create_user() + delete_alert_warning = sign_in.get_translation_by_key("delete-profile-warning") profile = sign_in.profile_button.click() profile.logout() if sign_in.ok_button.is_element_displayed(): @@ -50,14 +36,14 @@ class TestProfileSingleDevice(SingleDeviceTestCase): public_key, username = sign_in.get_public_key_and_username(return_username=True) profile.privacy_and_security_button.click() profile.delete_my_profile_button.click() - for element in (username, delete_alert_text): - if not profile.element_by_text(delete_alert_text).is_element_displayed(): - self.errors.append('Required %s is not shown when deleting multiaccount' % element) + for text in (username, delete_alert_warning): + if not profile.element_by_text(text).is_element_displayed(): + self.errors.append('Required %s is not shown when deleting multiaccount' % text) profile.delete_profile_button.click() - if profile.element_by_text('Profile deleted').is_element_displayed(): + if profile.element_by_translation_id("profile-deleted-title").is_element_displayed(): self.driver.fail('Profile is deleted without confirmation with password') profile.delete_my_profile_password_input.set_value(common_password) - profile.delete_profile_button.click_until_presence_of_element(profile.element_by_text('Profile deleted')) + profile.delete_profile_button.click_until_presence_of_element(profile.element_by_translation_id("profile-deleted-title")) profile.ok_button.click() sign_in.just_fyi('Delete last multiaccount') @@ -113,7 +99,7 @@ class TestProfileSingleDevice(SingleDeviceTestCase): sign_in.just_fyi("Enable mobile network to see popup and stop syncing") sign_in.toggle_mobile_data() - sign_in.wait_for_element_starts_with_text('Stop syncing').click() + sign_in.element_by_translation_id("mobile-network-stop-syncing").wait_and_click() if not sign_in.wait_for_element_starts_with_text(offline_banner_text, 120): self.driver.fail('No popup about offline history is shown') sign_in.element_by_text_part(offline_banner_text).click() @@ -156,62 +142,28 @@ class TestProfileSingleDevice(SingleDeviceTestCase): self.errors.append("'Ask me when on mobile network' is not enabled by default") self.errors.verify_no_errors() - - @marks.testrail_id(5454) - @marks.critical - @marks.skip - # TODO: waiting for better times - no profile picture for now - def test_user_can_remove_profile_picture(self): - signin_view = SignInView(self.driver) - home_view = signin_view.create_user() - profile_view = home_view.profile_button.click() - profile_view.edit_profile_picture('sauce_logo.png') - profile_view.swipe_down() - if not profile_view.profile_picture.is_element_image_equals_template('sauce_logo_profile.png'): - self.driver.fail('Profile picture was not updated') - profile_view.remove_profile_picture() - profile_view.swipe_down() - if profile_view.profile_picture.is_element_image_equals_template('default_icon_profile.png'): - self.driver.fail('Profile picture was not deleted') - @marks.testrail_id(5323) @marks.critical - def test_share_contact_code_and_wallet_address(self): - sign_in_view = SignInView(self.driver) - sign_in_view.create_user() - profile_view = sign_in_view.profile_button.click() - profile_view.share_my_profile_button.click() - public_key = profile_view.public_key_text.text - profile_view.share_button.click() - profile_view.share_via_messenger() - if not profile_view.element_by_text_part(public_key).is_element_present(): - self.errors.append("Can't share public key") - for _ in range(2): - profile_view.click_system_back_button() - profile_view.close_share_popup() - wallet = profile_view.wallet_button.click() - wallet.set_up_wallet() - wallet.accounts_status_account.click() - request = wallet.receive_transaction_button.click() - address = wallet.address_text.text - request.share_button.click() - wallet.share_via_messenger() - if not wallet.element_by_text_part(address).is_element_present(): - self.errors.append("Can't share address") - self.errors.verify_no_errors() + def test_share_copy_contact_code_and_wallet_address(self): + home = SignInView(self.driver).create_user() + profile = home.profile_button.click() - @marks.testrail_id(5375) - @marks.high - def test_copy_contact_code_and_wallet_address(self): - sign_in_view = SignInView(self.driver) - sign_in_view.create_user() - profile_view = sign_in_view.profile_button.click() - profile_view.share_my_profile_button.click() - public_key = profile_view.public_key_text.text - profile_view.public_key_text.long_press_element() - profile_view.copy_text() - profile_view.close_share_popup() - home = profile_view.home_button.click() + home.just_fyi("Copying contact code") + profile.share_my_profile_button.click() + public_key = profile.public_key_text.text + profile.public_key_text.long_press_element() + profile.copy_text() + + home.just_fyi("Sharing contact code via messenger") + profile.share_button.click() + profile.share_via_messenger() + if not profile.element_by_text_part(public_key).is_element_present(): + self.errors.append("Can't share public key") + [profile.click_system_back_button() for _ in range(2)] + profile.close_share_popup() + + home.just_fyi("Check that can paste contact code in chat message input") + home = profile.home_button.click() chat = home.add_contact(transaction_senders['M']['public_key']) chat.chat_message_input.click() chat.paste_text() @@ -221,15 +173,24 @@ class TestProfileSingleDevice(SingleDeviceTestCase): chat.chat_message_input.clear() chat.get_back_to_home_view() - wallet = home.wallet_button.click() + home.just_fyi("Copying wallet address") + wallet = profile.wallet_button.click() wallet.set_up_wallet() wallet.accounts_status_account.click() - wallet.receive_transaction_button.click() + request = wallet.receive_transaction_button.click() address = wallet.address_text.text - share_view = home.get_send_transaction_view() - share_view.share_button.click() - share_view.element_by_text('Copy').click() - wallet.get_back_to_home_view() + request.share_button.click() + request.element_by_translation_id("sharing-copy-to-clipboard").click() + + home.just_fyi("Sharing wallet address via messenger") + request.share_button.click() + wallet.share_via_messenger() + if not wallet.element_by_text_part(address).is_element_present(): + self.errors.append("Can't share address") + [wallet.click_system_back_button() for _ in range(2)] + wallet.close_share_popup() + + home.just_fyi("Check that can paste wallet address in chat message input") wallet.home_button.click() home.get_chat(transaction_senders['M']['username']).click() chat.chat_message_input.click() @@ -270,57 +231,6 @@ class TestProfileSingleDevice(SingleDeviceTestCase): self.errors.verify_no_errors() - @marks.testrail_id(5475) - @marks.low - @marks.skip - # TODO: skip until profile picture change feature is enabled - def test_change_profile_picture_several_times(self): - sign_in_view = SignInView(self.driver) - sign_in_view.create_user() - profile_view = sign_in_view.profile_button.click() - for file_name in ['sauce_logo.png', 'sauce_logo_red.png', 'saucelabs_sauce.png']: - profile_view.edit_profile_picture(file_name=file_name) - profile_view.swipe_down() - if not profile_view.profile_picture.is_element_image_equals_template( - file_name.replace('.png', '_profile.png')): - self.driver.fail('Profile picture was not updated') - - @marks.testrail_id(6239) - @marks.medium - def test_backup_recovery_phrase(self): - sign_in_view = SignInView(self.driver) - sign_in_view.create_user() - if sign_in_view.profile_button.counter.text != '1': - self.errors.append('Profile button counter is not shown') - profile_view = sign_in_view.profile_button.click() - profile_view.logout() - sign_in_view.sign_in() - if sign_in_view.profile_button.counter.text != '1': - self.errors.append('Profile button counter is not shown after re-login') - sign_in_view.profile_button.click() - profile_view.privacy_and_security_button.click() - profile_view.backup_recovery_phrase_button.click() - recovery_phrase = profile_view.backup_recovery_phrase() - if sign_in_view.profile_button.counter.is_element_displayed(): - self.errors.append('Profile button counter is shown after recovery phrase backup') - profile_view.backup_recovery_phrase_button.click() - if not profile_view.backup_recovery_phrase_button.is_element_displayed(): - self.driver.fail('Back up seed phrase option is available after seed phrase backed up!') - profile_view.back_button.click() - profile_view.logout() - sign_in_view.access_key_button.click() - sign_in_view.enter_seed_phrase_button.click() - sign_in_view.seedphrase_input.click() - sign_in_view.seedphrase_input.set_value(' '.join(recovery_phrase.values())) - sign_in_view.next_button.click() - sign_in_view.element_by_text('UNLOCK').click() - sign_in_view.password_input.set_value(common_password) - chats_view = sign_in_view.sign_in_button.click() - chats_view.plus_button.click() - if not chats_view.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() - @marks.testrail_id(6296) @marks.high def test_recover_account_from_new_user_seedphrase(self): @@ -352,22 +262,25 @@ class TestProfileSingleDevice(SingleDeviceTestCase): @marks.testrail_id(5433) @marks.medium def test_invite_friends(self): - sign_in_view = SignInView(self.driver) - home = sign_in_view.create_user() + home = SignInView(self.driver).create_user() + + self.driver.info("Check it via 'Invite friends' on home view") home.invite_friends_button.click() home.share_via_messenger() - home.find_text_part("Hey join me on Status: https://join.status.im/u/0x") + home.element_by_text_part("Hey join me on Status: https://join.status.im/u/0x") home.click_system_back_button() + + self.driver.info("Check it via bottom sheet menu") home.plus_button.click() home.chats_menu_invite_friends_button.click() home.share_via_messenger() - home.find_text_part("Hey join me on Status: https://join.status.im/u/0x") + home.element_by_text_part("Hey join me on Status: https://join.status.im/u/0x") @marks.testrail_id(6312) @marks.medium def test_add_remove_contact_via_contacts_view(self): - sign_in_view = SignInView(self.driver) - home = sign_in_view.create_user() + home = SignInView(self.driver).create_user() + home.just_fyi('Check empty contacts view') profile = home.profile_button.click() profile.switch_network() @@ -398,11 +311,10 @@ class TestProfileSingleDevice(SingleDeviceTestCase): } home.just_fyi('Add contact and check that they appear in Contacts view') - from views.chat_view import ChatView - chat_view = ChatView(self.driver) + chat_view = home.get_chat_view() for key in users: profile.plus_button.click() - sign_in_view.just_fyi('Checking %s case' % key) + home.just_fyi('Checking %s case' % key) if 'scanning' in key: chat_view.scan_contact_code_button.click() if chat_view.allow_button.is_element_displayed(): @@ -429,60 +341,192 @@ class TestProfileSingleDevice(SingleDeviceTestCase): self.errors.append('Removed user is still shown in contact view') self.errors.verify_no_errors() - @marks.testrail_id(5431) @marks.medium def test_add_custom_network(self): + sign_in = SignInView(self.driver) + sign_in.create_user() + profile = sign_in.profile_button.click() + profile.add_custom_network() + sign_in.sign_in() + sign_in.profile_button.click() + profile.advanced_button.click() + profile.network_settings_button.scroll_to_element(10, 'up') + if not profile.element_by_text_part('custom_ropsten').is_element_displayed(): + self.driver.fail("Network custom_ropsten was not added!") + + @marks.testrail_id(6239) + @marks.medium + def test_backup_recovery_phrase(self): sign_in_view = SignInView(self.driver) sign_in_view.create_user() + if sign_in_view.profile_button.counter.text != '1': + self.errors.append('Profile button counter is not shown') profile_view = sign_in_view.profile_button.click() - profile_view.add_custom_network() + profile_view.logout() sign_in_view.sign_in() - profile_view = sign_in_view.profile_button.click() - profile_view.advanced_button.click() - profile_view.network_settings_button.scroll_to_element(10, 'up') - profile_view.find_text_part('custom_ropsten') + if sign_in_view.profile_button.counter.text != '1': + self.errors.append('Profile button counter is not shown after re-login') + sign_in_view.profile_button.click() + profile_view.privacy_and_security_button.click() + profile_view.backup_recovery_phrase_button.click() + recovery_phrase = profile_view.backup_recovery_phrase() + if sign_in_view.profile_button.counter.is_element_displayed(): + self.errors.append('Profile button counter is shown after recovery phrase backup') + profile_view.backup_recovery_phrase_button.click() + if not profile_view.backup_recovery_phrase_button.is_element_displayed(): + self.driver.fail('Back up seed phrase option is available after seed phrase backed up!') + profile_view.back_button.click() + profile_view.logout() + sign_in_view.access_key_button.click() + sign_in_view.enter_seed_phrase_button.click() + sign_in_view.seedphrase_input.click() + sign_in_view.seedphrase_input.set_value(' '.join(recovery_phrase.values())) + sign_in_view.next_button.click() + sign_in_view.element_by_translation_id(id="unlock", uppercase=True).click() + sign_in_view.password_input.set_value(common_password) + chats_view = sign_in_view.sign_in_button.click() + chats_view.plus_button.click() + if not chats_view.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() @marks.critical @marks.testrail_id(5419) @marks.flaky def test_logcat_backup_recovery_phrase(self): - sign_in_view = SignInView(self.driver) - sign_in_view.create_user() - profile_view = sign_in_view.profile_button.click() - profile_view.privacy_and_security_button.click() - profile_view.backup_recovery_phrase_button.click() - profile_view.ok_continue_button.click() - recovery_phrase = profile_view.get_recovery_phrase() - profile_view.next_button.click() - word_number = profile_view.recovery_phrase_word_number.number - profile_view.recovery_phrase_word_input.set_value(recovery_phrase[word_number]) - profile_view.next_button.click() - word_number_1 = profile_view.recovery_phrase_word_number.number - profile_view.recovery_phrase_word_input.set_value(recovery_phrase[word_number_1]) - profile_view.done_button.click() - profile_view.yes_button.click() - values_in_logcat = profile_view.find_values_in_logcat(passphrase1=recovery_phrase[word_number], + sign_in = SignInView(self.driver) + home = sign_in.create_user() + + home.just_fyi("Check that badge on profile about back up seed phrase is presented") + if home.profile_button.counter.text != '1': + self.errors.append('Profile button counter is not shown') + + home.just_fyi("Back up seed phrase and check logcat") + profile = home.profile_button.click() + profile.privacy_and_security_button.click() + profile.backup_recovery_phrase_button.click() + profile.ok_continue_button.click() + recovery_phrase = profile.get_recovery_phrase() + profile.next_button.click() + word_number = profile.recovery_phrase_word_number.number + profile.recovery_phrase_word_input.set_value(recovery_phrase[word_number]) + profile.next_button.click() + word_number_1 = profile.recovery_phrase_word_number.number + profile.recovery_phrase_word_input.set_value(recovery_phrase[word_number_1]) + profile.done_button.click() + profile.yes_button.click() + profile.ok_got_it_button.click() + if home.profile_button.counter.is_element_displayed(): + self.errors.append('Profile button counter is shown after recovery phrase backup') + values_in_logcat = profile.find_values_in_logcat(passphrase1=recovery_phrase[word_number], passphrase2=recovery_phrase[word_number_1]) if len(values_in_logcat) == 2: self.driver.fail(values_in_logcat) + profile.profile_button.double_click() - @marks.testrail_id(5391) + home.just_fyi("Try to restore same account from seed phrase (should be possible only to unlock existing account)") + profile.logout() + sign_in.access_key_button.click() + sign_in.enter_seed_phrase_button.click() + sign_in.seedphrase_input.click() + sign_in.seedphrase_input.set_value(' '.join(recovery_phrase.values())) + sign_in.next_button.click() + sign_in.element_by_translation_id(id="unlock", uppercase=True).click() + sign_in.password_input.set_value(common_password) + chat = sign_in.sign_in_button.click() + chat.plus_button.click() + if not chat.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() + + @marks.testrail_id(5453) + @marks.medium + def test_privacy_policy_node_version_need_help_in_profile(self): + signin = SignInView(self.driver) + no_link_found_error_msg = 'Could not find privacy policy link at' + no_link_open_error_msg = 'Could not open our privacy policy from' + + signin.just_fyi("Checking provacy policy from sign in and from profile") + if not signin.privacy_policy_link.is_element_displayed(): + self.driver.fail('%s Sign in view!' % no_link_found_error_msg) + web_page = signin.privacy_policy_link.click() + web_page.open_in_webview() + if not web_page.policy_summary.is_element_displayed(): + self.errors.append('%s Sign in view!' % no_link_open_error_msg) + web_page.click_system_back_button() + home = signin.create_user() + profile = home.profile_button.click() + profile.about_button.click() + profile.privacy_policy_button.click() + if not web_page.policy_summary.is_element_displayed(): + self.errors.append('%s Profile about view!' % no_link_open_error_msg) + web_page.click_system_back_button() + + signin.just_fyi("Checking that version match expected format and can be copied") + app_version = profile.app_version_text.text + node_version = profile.node_version_text.text + if not re.search(r'\d{1}[.]\d{1,2}[.]\d{1,2}\s[(]\d*[)]', app_version): + self.errors.append("App version %s didn't match expected format" % app_version) + if not re.search(r'StatusIM\/v.*\/android-\d{3}\/go\d{1}[.]\d{1,}', node_version): + self.errors.append("Node version %s didn't match expected format" % node_version) + profile.app_version_text.click() + profile.back_button.click() + profile.home_button.click() + chat = home.join_public_chat(home.get_random_chat_name()) + message_input = chat.chat_message_input + message_input.paste_text_from_clipboard() + if message_input.text != app_version: + self.errors.append('Version number was not copied to clipboard') + + signin.just_fyi("Checking Need help section") + home.profile_button.double_click() + profile.help_button.click() + web_page = profile.faq_button.click() + web_page.open_in_webview() + web_page.wait_for_d_aap_to_load() + if not profile.element_by_text_part("F.A.Q").is_element_displayed(): + self.errors.append("FAQ is not shown") + profile.click_system_back_button() + profile.submit_bug_button.click() + if not profile.element_by_text_part("Welcome to Gmail").is_element_displayed(): + self.errors.append("Mail client is not opened when submitting bug") + profile.click_system_back_button() + profile.request_a_feature_button.click() + if not profile.element_by_text("#status").is_element_displayed(): + self.errors.append("Status channel is not suggested for requesting a feature") + self.errors.verify_no_errors() + + @marks.testrail_id(5738) @marks.high - def test_need_help_section(self): - sign_in_view = SignInView(self.driver) - sign_in_view.create_user() - profile_view = sign_in_view.profile_button.click() - profile_view.help_button.click() - base_web_view = profile_view.faq_button.click() - base_web_view.open_in_webview() - base_web_view.find_full_text('Frequently Asked Questions') - base_web_view.click_system_back_button() - profile_view.submit_bug_button.click() - base_web_view.find_full_text('Welcome to Gmail') - base_web_view.click_system_back_button() - profile_view.request_a_feature_button.click() - profile_view.find_full_text('#status') + 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') + home.open_status_test_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() + dapp_view = profile.dapp_tab_button.click() + dapp_view.open_url(test_dapp_url) + if not dapp_view.element_by_text_part(account_name).is_element_displayed(): + self.errors.append('Wallet permission is not asked') + if dapp_view.allow_button.is_element_displayed(): + dapp_view.allow_button.click(times_to_click=1) + if not dapp_view.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 @@ -492,12 +536,12 @@ class TestProfileSingleDevice(SingleDeviceTestCase): profile.advanced_button.click() default_log_level = 'INFO' for text in default_log_level, used_fleet: - if not profile.element_by_text(text).is_element_displayed(): + if not profile.element_by_text(text).is_element_displayed(): self.errors.append('%s is not selected by default' % text) if home.find_values_in_geth('lvl=trce', 'lvl=dbug'): - self.errors.append('"%s" is set, but found another entries!' % default_log_level) + self.errors.append('"%s" is set, but found another entries!' % default_log_level) if not home.find_values_in_geth('lvl=info'): - self.errors.append('"%s" is set, but no entries are found!' % default_log_level) + self.errors.append('"%s" is set, but no entries are found!' % default_log_level) home.just_fyi('Set another loglevel and check that changes are applied') profile.log_level_setting_button.click() @@ -527,134 +571,6 @@ class TestProfileSingleDevice(SingleDeviceTestCase): self.errors.verify_no_errors() - - @marks.testrail_id(5468) - @marks.medium - @marks.skip - # TODO: skip until profile picture change feature is enabled - def test_deny_camera_access_changing_profile_photo(self): - sign_in = SignInView(self.driver) - sign_in.create_user() - profile = sign_in.profile_button.click() - profile.profile_picture.click() - profile.capture_button.click() - for _ in range(2): - profile.deny_button.click() - profile.element_by_text(camera_access_error_text).wait_for_visibility_of_element(3) - profile.ok_button.click() - profile.profile_picture.click() - profile.capture_button.click() - profile.deny_button.wait_for_visibility_of_element(2) - - @marks.testrail_id(5469) - @marks.medium - @marks.skip - # TODO: skip until profile picture change feature is enabled - def test_deny_device_storage_access_changing_profile_photo(self): - sign_in = SignInView(self.driver) - sign_in.create_user() - profile = sign_in.profile_button.click() - profile.profile_picture.click() - profile.select_from_gallery_button.click() - profile.deny_button.click() - profile.element_by_text(photos_access_error_text, element_type='text').wait_for_visibility_of_element(3) - profile.ok_button.click() - profile.profile_picture.click() - profile.select_from_gallery_button.click() - profile.deny_button.wait_for_visibility_of_element(2) - - @marks.testrail_id(5299) - @marks.high - def test_user_can_switch_network(self): - signin_view = SignInView(self.driver) - home_view = signin_view.create_user() - network_name = 'Mainnet with upstream RPC' - profile = home_view.profile_button.click() - profile.switch_network(network_name) - profile = home_view.profile_button.click() - if not profile.current_active_network == network_name: - self.driver.fail('Oops! Wrong network selected!') - - @marks.testrail_id(5453) - @marks.medium - def test_privacy_policy_is_accessible(self): - signin_view = SignInView(self.driver) - no_link_found_error_msg = 'Could not find privacy policy link at' - no_link_open_error_msg = 'Could not open our privacy policy from' - - if not signin_view.privacy_policy_link.is_element_displayed(): - self.driver.fail('{} Sign in view!'.format(no_link_found_error_msg)) - - base_web_view = signin_view.privacy_policy_link.click() - base_web_view.open_in_webview() - if not base_web_view.policy_summary.is_element_displayed(): - self.errors.append('{} Sign in view!'.format(no_link_open_error_msg)) - - base_web_view.click_system_back_button() - home_view = signin_view.create_user() - profile = home_view.profile_button.click() - profile.about_button.click() - profile.privacy_policy_button.click() - - if not base_web_view.policy_summary.is_element_displayed(): - self.errors.append('{} Profile about view!'.format(no_link_open_error_msg)) - - self.errors.verify_no_errors() - - @marks.testrail_id(5738) - @marks.high - def test_dapps_permissions(self): - home_view = SignInView(self.driver).create_user() - account_name = home_view.status_account_name - - home_view.just_fyi('open Status Test Dapp, allow all and check permissions in Profile') - home_view.open_status_test_dapp() - home_view.dapp_tab_button.click() - profile_view = home_view.profile_button.click() - profile_view.privacy_and_security_button.click() - profile_view.dapp_permissions_button.click() - profile_view.element_by_text(test_dapp_name).click() - if not profile_view.element_by_text(account_name).is_element_displayed(): - self.errors.append('Wallet permission was not granted') - if not profile_view.element_by_text('Chat key').is_element_displayed(): - self.errors.append('Contact code permission was not granted') - - profile_view.just_fyi('revoke access and check that they are asked second time') - profile_view.revoke_access_button.click() - profile_view.back_button.click() - dapp_view = profile_view.dapp_tab_button.click() - dapp_view.open_url(test_dapp_url) - if not dapp_view.element_by_text_part(account_name).is_element_displayed(): - self.errors.append('Wallet permission is not asked') - if dapp_view.allow_button.is_element_displayed(): - dapp_view.allow_button.click(times_to_click=1) - if not dapp_view.element_by_text_part('to your profile').is_element_displayed(): - self.errors.append('Profile permission is not asked') - self.errors.verify_no_errors() - - @marks.testrail_id(5428) - @marks.low - def test_version_format(self): - sign_in_view = SignInView(self.driver) - home_view = sign_in_view.create_user() - profile_view = home_view.profile_button.click() - profile_view.about_button.click() - app_version = profile_view.app_version_text.text - node_version = profile_view.node_version_text.text - if not re.search(r'\d{1}[.]\d{1,2}[.]\d{1,2}\s[(]\d*[)]', app_version): - self.errors.append("App version %s didn't match expected format" % app_version) - if not re.search(r'StatusIM\/v.*\/android-\d{3}\/go\d{1}[.]\d{1,}', node_version): - self.errors.append("Node version %s didn't match expected format" % node_version) - profile_view.app_version_text.click() - profile_view.back_button.click() - profile_view.home_button.click() - chat = home_view.join_public_chat(home_view.get_random_chat_name()) - message_input = chat.chat_message_input - message_input.paste_text_from_clipboard() - if message_input.text != app_version: - self.errors.append('Version number was not copied to clipboard') - self.errors.verify_no_errors() - @marks.testrail_id(5766) @marks.medium @marks.flaky @@ -696,33 +612,97 @@ class TestProfileSingleDevice(SingleDeviceTestCase): @marks.testrail_id(6219) @marks.medium def test_set_primary_ens_custom_domain(self): - sign_in_view = SignInView(self.driver) + home = SignInView(self.driver).recover_access(ens_user['passphrase']) ens_not_stateofus = ens_user['ens_another_domain'] ens_stateofus = ens_user['ens'] - home_view = sign_in_view.recover_access(ens_user['passphrase']) - home_view.just_fyi('add 2 ENS names in Profile') - profile_view = home_view.profile_button.click() - dapp_view = profile_view.connect_existing_status_ens(ens_stateofus) - profile_view.element_by_text("Add username").click() - profile_view.element_by_text_part("another domain").click() - dapp_view.ens_name_input.set_value(ens_not_stateofus) - dapp_view.check_ens_name.click_until_presence_of_element(dapp_view.element_by_text('Ok, got it')) - dapp_view.element_by_text('Ok, got it').click() + home.just_fyi('add 2 ENS names in Profile') + profile = home.profile_button.click() + dapp = profile.connect_existing_status_ens(ens_stateofus) + profile.element_by_text("Add username").click() + profile.element_by_text_part("another domain").click() + dapp.ens_name_input.set_value(ens_not_stateofus) + dapp.check_ens_name.click_until_presence_of_element(dapp.element_by_translation_id("ens-got-it")) + dapp.element_by_translation_id("ens-got-it").click() - home_view.just_fyi('check that by default %s ENS is set' % ens_stateofus) - dapp_view.element_by_text('Primary username').click() + home.just_fyi('check that by default %s ENS is set' % ens_stateofus) + dapp.element_by_text('Primary username').click() message_to_check = 'Your messages are displayed to others with' - if not dapp_view.element_by_text('%s\n@%s.stateofus.eth' % (message_to_check, ens_stateofus)).is_element_displayed(): + if not dapp.element_by_text('%s\n@%s.stateofus.eth' % (message_to_check, ens_stateofus)).is_element_displayed(): self.errors.append('%s ENS username is not set as primary by default' % ens_stateofus) - home_view.just_fyi('check view in chat settings ENS from other domain: %s after set new primary ENS' % ens_not_stateofus) - dapp_view.set_primary_ens_username(ens_user['ens_another_domain']).click() - if profile_view.username_in_ens_chat_settings_text.text != '@' + ens_not_stateofus: + home.just_fyi('check view in chat settings ENS from other domain: %s after set new primary ENS' % ens_not_stateofus) + dapp.set_primary_ens_username(ens_user['ens_another_domain']).click() + if profile.username_in_ens_chat_settings_text.text != '@' + ens_not_stateofus: self.errors.append('ENS username %s is not shown in ENS username Chat Settings after enabling' % ens_not_stateofus) self.errors.verify_no_errors() + @marks.testrail_id(5302) + @marks.high + @marks.skip + # TODO: skip until profile picture change feature is enabled + def test_set_profile_picture(self): + sign_in_view = SignInView(self.driver) + sign_in_view.create_user() + profile_view = sign_in_view.profile_button.click() + profile_view.edit_profile_picture(file_name='sauce_logo.png') + profile_view.home_button.click() + sign_in_view.profile_button.click() + profile_view.swipe_down() + if not profile_view.profile_picture.is_element_image_equals_template('sauce_logo_profile.png'): + self.driver.fail('Profile picture was not updated') + + @marks.testrail_id(5475) + @marks.low + @marks.skip + # TODO: skip until profile picture change feature is enabled + def test_change_profile_picture_several_times(self): + sign_in_view = SignInView(self.driver) + sign_in_view.create_user() + profile_view = sign_in_view.profile_button.click() + for file_name in ['sauce_logo.png', 'sauce_logo_red.png', 'saucelabs_sauce.png']: + profile_view.edit_profile_picture(file_name=file_name) + profile_view.swipe_down() + if not profile_view.profile_picture.is_element_image_equals_template( + file_name.replace('.png', '_profile.png')): + self.driver.fail('Profile picture was not updated') + + @marks.testrail_id(5468) + @marks.medium + @marks.skip + # TODO: skip until profile picture change feature is enabled + def test_deny_camera_access_changing_profile_photo(self): + sign_in = SignInView(self.driver) + sign_in.create_user() + profile = sign_in.profile_button.click() + profile.profile_picture.click() + profile.capture_button.click() + for _ in range(2): + profile.deny_button.click() + profile.element_by_translation_id("camera-access-error").wait_for_visibility_of_element(3) + profile.ok_button.click() + profile.profile_picture.click() + profile.capture_button.click() + profile.deny_button.wait_for_visibility_of_element(2) + + @marks.testrail_id(5469) + @marks.medium + @marks.skip + # TODO: skip until profile picture change feature is enabled + def test_deny_device_storage_access_changing_profile_photo(self): + sign_in = SignInView(self.driver) + sign_in.create_user() + profile = sign_in.profile_button.click() + profile.profile_picture.click() + profile.select_from_gallery_button.click() + profile.deny_button.click() + profile.element_by_translation_id(id="external-storage-denied", element_type='text').wait_for_visibility_of_element(3) + profile.ok_button.click() + profile.profile_picture.click() + profile.select_from_gallery_button.click() + profile.deny_button.wait_for_visibility_of_element(2) + class TestProfileMultipleDevice(MultipleDeviceTestCase): @@ -782,7 +762,7 @@ class TestProfileMultipleDevice(MultipleDeviceTestCase): @marks.testrail_id(5436) @marks.medium - #@marks.flaky + @marks.flaky def test_add_switch_delete_custom_mailserver(self): self.create_drivers(2) sign_in_1, sign_in_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1]) @@ -1056,83 +1036,6 @@ class TestProfileMultipleDevice(MultipleDeviceTestCase): self.errors.verify_no_errors() - @marks.testrail_id(5680) - @marks.high - @marks.skip - # TODO: skip until edit userpic is enabled back - def test_pair_devices_sync_name_photo_public_group_chats(self): - self.create_drivers(2) - device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1]) - device_1_home = device_1.create_user() - device_1_home.profile_button.click() - device_1_profile = device_1_home.get_profile_view() - device_1_profile.privacy_and_security_button.click() - device_1_profile.backup_recovery_phrase_button.click() - recovery_phrase = device_1_profile.backup_recovery_phrase() - device_1_profile.back_button.click() - device_1_profile.get_back_to_home_view() - device_1_name = 'device_%s' % device_1.driver.number - device_2_name = 'device_%s' % device_2.driver.number - public_chat_before_sync_name = 'b-public-%s' % device_1_home.get_random_chat_name() - public_chat_after_sync_name = 'a-public-%s' % device_1_home.get_random_chat_name() - group_chat_name = 'group-%s' % device_1_home.get_random_chat_name() - message_after_sync = 'sent after sync' - - device_1.just_fyi('join public chat, create group chat, edit user picture') - device_1_public_chat = device_1_home.join_public_chat(public_chat_before_sync_name) - device_1_public_chat.back_button.click() - device_1_one_to_one = device_1_home.add_contact(basic_user['public_key']) - device_1_one_to_one.back_button.click() - device_1_group_chat = device_1_home.create_group_chat([basic_user['username']], group_chat_name) - device_1_group_chat.back_button.click() - device_1_home.profile_button.click() - device_1_profile = device_1_home.get_profile_view() - device_1_profile.edit_profile_picture('sauce_logo.png') - - device_2.just_fyi('go to profile > Devices, set device name, discover device 2 to device 1') - device_2_home = device_2.recover_access(passphrase=' '.join(recovery_phrase.values())) - device_2_profile = device_2_home.get_profile_view() - device_2_profile.discover_and_advertise_device(device_2_name) - - device_1.just_fyi('enable pairing of `device 2` and sync') - device_1_profile.discover_and_advertise_device(device_1_name) - device_1_profile.get_toggle_device_by_name(device_2_name).click() - device_1_profile.sync_all_button.click() - device_1_profile.sync_all_button.wait_for_visibility_of_element(15) - - device_2.just_fyi('check that public chat and profile details are updated') - device_2_home = device_2_profile.get_back_to_home_view() - if not device_2_home.element_by_text('#%s' % public_chat_before_sync_name).is_element_displayed(): - self.errors.append('Public chat "%s" doesn\'t appear after initial sync' - % public_chat_before_sync_name) - device_2_home.home_button.click() - device_2_home.profile_button.click() - if not device_2_profile.profile_picture.is_element_image_equals_template('sauce_logo_profile.png'): - self.errors.append('Profile picture was not updated after initial sync') - device_2_profile.home_button.click() - - device_1.just_fyi('send message to group chat, and join to new public chat') - device_1_home = device_1_profile.get_back_to_home_view() - device_1_public_chat = device_1_home.join_public_chat(public_chat_after_sync_name) - device_1_public_chat.back_button.click() - device_1_home.element_by_text(group_chat_name).click() - device_1_group_chat.chat_message_input.send_keys(message_after_sync) - device_1_group_chat.send_message_button.click() - device_1_group_chat.back_button.click() - - device_2.just_fyi('check that message in group chat is shown, public chats are synced') - if not device_2_home.element_by_text('#%s' % public_chat_after_sync_name).is_element_displayed(): - self.errors.append('Public chat "%s" doesn\'t appear on other device when devices are paired' - % public_chat_before_sync_name) - - device_2_home.element_by_text(group_chat_name).click() - device_2_group_chat = device_2_home.get_chat_view() - - if not device_2_group_chat.chat_element_by_text(message_after_sync).is_element_displayed(): - self.errors.append('"%s" message in group chat is not synced' % message_after_sync) - - self.errors.verify_no_errors() - @marks.testrail_id(6226) @marks.critical def test_ens_mentions_and_nickname_in_public_and_1_1_chats(self): @@ -1236,3 +1139,80 @@ class TestProfileMultipleDevice(MultipleDeviceTestCase): self.errors.append('Nickname for user with ENS is not shown in public chat') self.errors.verify_no_errors() + + @marks.testrail_id(5680) + @marks.high + @marks.skip + # TODO: skip until edit userpic is enabled back + def test_pair_devices_sync_name_photo_public_group_chats(self): + self.create_drivers(2) + device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1]) + device_1_home = device_1.create_user() + device_1_home.profile_button.click() + device_1_profile = device_1_home.get_profile_view() + device_1_profile.privacy_and_security_button.click() + device_1_profile.backup_recovery_phrase_button.click() + recovery_phrase = device_1_profile.backup_recovery_phrase() + device_1_profile.back_button.click() + device_1_profile.get_back_to_home_view() + device_1_name = 'device_%s' % device_1.driver.number + device_2_name = 'device_%s' % device_2.driver.number + public_chat_before_sync_name = 'b-public-%s' % device_1_home.get_random_chat_name() + public_chat_after_sync_name = 'a-public-%s' % device_1_home.get_random_chat_name() + group_chat_name = 'group-%s' % device_1_home.get_random_chat_name() + message_after_sync = 'sent after sync' + + device_1.just_fyi('join public chat, create group chat, edit user picture') + device_1_public_chat = device_1_home.join_public_chat(public_chat_before_sync_name) + device_1_public_chat.back_button.click() + device_1_one_to_one = device_1_home.add_contact(basic_user['public_key']) + device_1_one_to_one.back_button.click() + device_1_group_chat = device_1_home.create_group_chat([basic_user['username']], group_chat_name) + device_1_group_chat.back_button.click() + device_1_home.profile_button.click() + device_1_profile = device_1_home.get_profile_view() + device_1_profile.edit_profile_picture('sauce_logo.png') + + device_2.just_fyi('go to profile > Devices, set device name, discover device 2 to device 1') + device_2_home = device_2.recover_access(passphrase=' '.join(recovery_phrase.values())) + device_2_profile = device_2_home.get_profile_view() + device_2_profile.discover_and_advertise_device(device_2_name) + + device_1.just_fyi('enable pairing of `device 2` and sync') + device_1_profile.discover_and_advertise_device(device_1_name) + device_1_profile.get_toggle_device_by_name(device_2_name).click() + device_1_profile.sync_all_button.click() + device_1_profile.sync_all_button.wait_for_visibility_of_element(15) + + device_2.just_fyi('check that public chat and profile details are updated') + device_2_home = device_2_profile.get_back_to_home_view() + if not device_2_home.element_by_text('#%s' % public_chat_before_sync_name).is_element_displayed(): + self.errors.append('Public chat "%s" doesn\'t appear after initial sync' + % public_chat_before_sync_name) + device_2_home.home_button.click() + device_2_home.profile_button.click() + if not device_2_profile.profile_picture.is_element_image_equals_template('sauce_logo_profile.png'): + self.errors.append('Profile picture was not updated after initial sync') + device_2_profile.home_button.click() + + device_1.just_fyi('send message to group chat, and join to new public chat') + device_1_home = device_1_profile.get_back_to_home_view() + device_1_public_chat = device_1_home.join_public_chat(public_chat_after_sync_name) + device_1_public_chat.back_button.click() + device_1_home.element_by_text(group_chat_name).click() + device_1_group_chat.chat_message_input.send_keys(message_after_sync) + device_1_group_chat.send_message_button.click() + device_1_group_chat.back_button.click() + + device_2.just_fyi('check that message in group chat is shown, public chats are synced') + if not device_2_home.element_by_text('#%s' % public_chat_after_sync_name).is_element_displayed(): + self.errors.append('Public chat "%s" doesn\'t appear on other device when devices are paired' + % public_chat_before_sync_name) + + device_2_home.element_by_text(group_chat_name).click() + device_2_group_chat = device_2_home.get_chat_view() + + if not device_2_group_chat.chat_element_by_text(message_after_sync).is_element_displayed(): + self.errors.append('"%s" message in group chat is not synced' % message_after_sync) + + self.errors.verify_no_errors() diff --git a/test/appium/tests/atomic/chats/test_chats_management.py b/test/appium/tests/atomic/chats/test_chats_management.py index 2ea5ef0a1f..1017dac8bf 100644 --- a/test/appium/tests/atomic/chats/test_chats_management.py +++ b/test/appium/tests/atomic/chats/test_chats_management.py @@ -1,6 +1,6 @@ import time -from tests import marks, camera_access_error_text, photos_access_error_text, recorded_error +from tests import marks from tests.users import basic_user, dummy_user, ens_user_ropsten, ens_user, ens_user_message_sender from tests.base_test_case import SingleDeviceTestCase, MultipleDeviceTestCase from views.sign_in_view import SignInView @@ -290,31 +290,31 @@ class TestChatManagement(SingleDeviceTestCase): home.plus_button.click() home.universal_qr_scanner_button.click() home.deny_button.click() - home.element_by_text(camera_access_error_text).wait_for_visibility_of_element(3) + home.element_by_translation_id("camera-access-error").wait_for_visibility_of_element(3) home.ok_button.click() home.get_back_to_home_view() home.just_fyi("Denying access to camera in scan chat key view") home.plus_button.click() - contacts_view = home.start_new_chat_button.click() - contacts_view.scan_contact_code_button.click() - contacts_view.deny_button.click() - contacts_view.element_by_text(camera_access_error_text).wait_for_visibility_of_element(3) - contacts_view.ok_button.click() + chat = home.start_new_chat_button.click() + chat.scan_contact_code_button.click() + chat.deny_button.click() + chat.element_by_translation_id("camera-access-error").wait_for_visibility_of_element(3) + chat.ok_button.click() home.get_back_to_home_view() home.just_fyi("Denying access to gallery at attempt to send image") - chat = home.add_contact(basic_user['public_key']) + home.add_contact(basic_user['public_key']) chat.show_images_button.click() chat.deny_button.click() - contacts_view.element_by_text(photos_access_error_text).wait_for_visibility_of_element(3) - contacts_view.ok_button.click() + chat.element_by_translation_id("external-storage-denied").wait_for_visibility_of_element(3) + chat.ok_button.click() home.just_fyi("Denying access to audio at attempt to record audio") chat.audio_message_button.click() chat.deny_button.click() - contacts_view.element_by_text(recorded_error).wait_for_visibility_of_element(3) - contacts_view.ok_button.click() + chat.element_by_translation_id("audio-recorder-permissions-error").wait_for_visibility_of_element(3) + chat.ok_button.click() home.get_back_to_home_view() home.just_fyi("Denying access to camera in wallet view") @@ -322,7 +322,7 @@ class TestChatManagement(SingleDeviceTestCase): wallet.set_up_wallet() wallet.scan_qr_button.click() wallet.deny_button.click() - wallet.element_by_text(camera_access_error_text).wait_for_visibility_of_element(3) + wallet.element_by_translation_id("camera-access-error").wait_for_visibility_of_element(3) wallet.ok_button.click() home.just_fyi("Denying access to camera in send transaction > scan address view") @@ -331,7 +331,7 @@ class TestChatManagement(SingleDeviceTestCase): send_transaction.chose_recipient_button.scroll_and_click() send_transaction.scan_qr_code_button.click() send_transaction.deny_button.click() - send_transaction.element_by_text(camera_access_error_text).wait_for_visibility_of_element(3) + send_transaction.element_by_translation_id("camera-access-error").wait_for_visibility_of_element(3) send_transaction.ok_button.click() wallet.back_button.click_until_absense_of_element(wallet.back_button) 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 c75fe32b76..8f3b472bb4 100644 --- a/test/appium/tests/atomic/dapps_and_browsing/test_browsing.py +++ b/test/appium/tests/atomic/dapps_and_browsing/test_browsing.py @@ -1,7 +1,6 @@ -from tests import marks, connection_not_secure_text, connection_is_secure_text +from tests import marks from tests.base_test_case import SingleDeviceTestCase from views.sign_in_view import SignInView -from views.dapps_view import DappsView class TestBrowsing(SingleDeviceTestCase): @@ -71,35 +70,33 @@ class TestBrowsing(SingleDeviceTestCase): @marks.testrail_id(6210) @marks.high def test_open_blocked_secure_not_secure_sites(self): - home_view = SignInView(self.driver).create_user() - daap_view = home_view.dapp_tab_button.click() + home = SignInView(self.driver).create_user() + daap = home.dapp_tab_button.click() for url in ('metamask.site', 'https://www.cryptokitties.domainname'): - daap_view.just_fyi('Checking blocked website %s' % url) - dapp_detail = daap_view.open_url(url) + daap.just_fyi('Checking blocked website %s' % url) + dapp_detail = daap.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() - daap_view.element_by_text("Browser").click() + daap.element_by_text("Browser").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) - home_view.dapp_tab_button.click() + home.dapp_tab_button.click() - daap_view.just_fyi('Checking connection is not secure warning') - browsing_view = daap_view.open_url('http://www.dvwa.co.uk') - browsing_view.url_edit_box_lock_icon.click_until_presence_of_element( - browsing_view.element_by_text(connection_not_secure_text)) - home_view.dapp_tab_button.click() + daap.just_fyi('Checking connection is not secure warning') + web_page = daap.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")) + home.dapp_tab_button.click() for url in ('https://www.bbc.com', 'https://instant.airswap.io'): - daap_view.just_fyi('Checking connection is secure for %s' % url) - browsing_view = daap_view.open_url(url) - browsing_view.wait_for_d_aap_to_load() - browsing_view.url_edit_box_lock_icon.click_until_presence_of_element( - browsing_view.element_by_text(connection_is_secure_text)) - home_view.dapp_tab_button.click() + daap.just_fyi('Checking connection is secure for %s' % url) + web_page = daap.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")) + home.dapp_tab_button.click() self.errors.verify_no_errors() @@ -114,7 +111,7 @@ class TestBrowsing(SingleDeviceTestCase): browsing_view = daap_view.open_url('https://simpledapp.status.im/webviewtest/url-spoof-ssl.html') browsing_view.url_edit_box_lock_icon.click() - if not browsing_view.element_by_text_part(connection_not_secure_text).is_element_displayed(): + if not browsing_view.element_by_translation_id("browser-not-secure").is_element_displayed(): self.errors.append("Broken certificate displayed as secure connection \n") browsing_view.cross_icon.click() diff --git a/test/appium/views/base_element.py b/test/appium/views/base_element.py index 7e06c03217..09051ba215 100644 --- a/test/appium/views/base_element.py +++ b/test/appium/views/base_element.py @@ -80,6 +80,10 @@ class BaseElement(object): self.driver.info('*Tap on found %s*' % self.name) return self.navigate() + def double_click(self): + self.driver.info('*Double tap on %s*' % self.name) + [self.find_element().click() for _ in range(2)] + def wait_for_element(self, seconds=10): try: return WebDriverWait(self.driver, seconds) \