diff --git a/test/appium/tests/atomic/account_management/test_profile.py b/test/appium/tests/atomic/account_management/test_profile.py index 2ac9f94e17..6ccdb87874 100644 --- a/test/appium/tests/atomic/account_management/test_profile.py +++ b/test/appium/tests/atomic/account_management/test_profile.py @@ -58,90 +58,6 @@ class TestProfileSingleDevice(SingleDeviceTestCase): self.errors.append('No redirected to carousel view after deleting last multiaccount') self.errors.verify_no_errors() - @marks.testrail_id(5741) - @marks.high - def test_mobile_data_usage_popup_continue_syncing(self): - sign_in_view = SignInView(self.driver) - sign_in_view.create_user() - sign_in_view.just_fyi("Enable mobile network to see popup and enable syncing") - sign_in_view.toggle_mobile_data() - if not sign_in_view.element_by_translation_id("mobile-syncing-sheet-title").is_element_displayed(): - self.driver.fail('No popup about Mobile data is shown') - sign_in_view.wait_for_element_starts_with_text('Continue syncing').click() - - sign_in_view.just_fyi("Check that selected option is stored in Profile") - profile_view = sign_in_view.profile_button.click() - profile_view.sync_settings_button.click() - profile_view.element_by_translation_id("mobile-network-settings").click() - if not profile_view.use_mobile_data.attribute_value('checked'): - self.errors.append("Use mobile data option is enabled after 'Continue syncing' selected") - if profile_view.ask_me_when_on_mobile_network.attribute_value('checked'): - self.errors.append("'Ask me when on mobile network' option not enabled even it was checked when 'Continue" - "syncing' selected!") - - sign_in_view.just_fyi("Check that can join public chat and send message") - chat_name = sign_in_view.get_random_chat_name() - home = profile_view.get_back_to_home_view() - chat = home.join_public_chat(chat_name) - message = 'test message' - chat.chat_message_input.send_keys(message) - chat.send_message_button.click() - if not chat.chat_element_by_text(message).is_element_displayed(): - self.errors.append("Message was not sent!") - self.errors.verify_no_errors() - - @marks.testrail_id(6228) - @marks.high - def test_mobile_data_usage_popup_stop_syncing(self): - sign_in = SignInView(self.driver) - sign_in.create_user() - offline_banner_text = sign_in.get_translation_by_key("mobile-network-sheet-offline") - - sign_in.just_fyi("Enable mobile network to see popup and stop syncing") - sign_in.toggle_mobile_data() - 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() - for id in "mobile-network-sheet-offline", "mobile-network-start-syncing", "mobile-network-go-to-settings": - if not sign_in.element_by_translation_id(id).is_element_displayed(): - self.driver.fail("%s is not shown" % sign_in.get_translation_by_key(id)) - - sign_in.just_fyi("Start syncing in offline popup") - sign_in.element_by_translation_id("mobile-network-start-syncing").click() - sign_in.element_by_text_part(offline_banner_text).wait_for_invisibility_of_element(10) - if sign_in.element_by_text_part(offline_banner_text).is_element_displayed(): - self.driver.fail("Popup about offline history is shown") - - @marks.testrail_id(6229) - @marks.high - def test_mobile_data_usage_settings(self): - sign_in_view = SignInView(self.driver).create_user() - profile_view = sign_in_view.profile_button.click() - - sign_in_view.just_fyi("Check default preferences") - profile_view.sync_settings_button.click() - profile_view.element_by_translation_id("mobile-network-settings").click() - - if profile_view.use_mobile_data.text != 'OFF': - self.errors.append("Mobile data is enabled by default") - if profile_view.ask_me_when_on_mobile_network.text != "ON": - self.errors.append("'Ask me when on mobile network' is not enabled by default") - - sign_in_view.just_fyi("Disable 'ask me when on mobile network' and check that it is not shown") - profile_view.ask_me_when_on_mobile_network.click() - sign_in_view.toggle_mobile_data() - if sign_in_view.element_by_translation_id("mobile-network-start-syncing").is_element_displayed(20): - self.errors.append("Popup is shown, but 'ask me when on mobile network' is disabled") - - sign_in_view.just_fyi("Check 'Restore default' setting") - profile_view.element_by_text('Restore Defaults').click() - if profile_view.use_mobile_data.attribute_value("checked"): - self.errors.append("Mobile data is enabled by default") - if not profile_view.ask_me_when_on_mobile_network.attribute_value("checked"): - self.errors.append("'Ask me when on mobile network' is not enabled by default") - self.errors.verify_no_errors() - @marks.testrail_id(5323) @marks.critical def test_share_copy_contact_code_and_wallet_address(self): @@ -877,15 +793,20 @@ class TestProfileMultipleDevice(MultipleDeviceTestCase): profile_1.home_button.click() public_chat_1 = home_1.join_public_chat(public_chat_name) public_chat_1.relogin() - if not public_chat_1.element_by_text_part("Connecting").is_element_displayed(20): - self.errors.append("Indicator doesn't show 'Connecting'") + + profile_1.just_fyi('check that still connected to custom mailserver after relogin') + home_1.profile_button.click() + profile_1.sync_settings_button.click() + if not profile_1.element_by_text(server_name).is_element_displayed(): + self.drivers[0].fail("Not connected to custom mailserver after re-login") profile_1.just_fyi('check that can RETRY to connect') - for _ in range(2): - public_chat_1.element_by_translation_id('mailserver-retry', 'button', uppercase=True).wait_and_click(60) + profile_1.element_by_translation_id(id='mailserver-error-title').wait_for_element(60) + public_chat_1.element_by_translation_id(id='mailserver-retry', uppercase=True).wait_and_click(60) profile_1.just_fyi('check that can pick another mailserver and receive messages') - public_chat_1.element_by_translation_id('mailserver-pick-another', 'button', uppercase=True).wait_and_click(60) + profile_1.element_by_translation_id(id='mailserver-error-title').wait_for_element(60) + profile_1.element_by_translation_id(id='mailserver-pick-another', uppercase=True).wait_and_click(120) mailserver = profile_1.return_mailserver_name(mailserver_ams, used_fleet) profile_1.element_by_text(mailserver).click() profile_1.confirm_button.click() @@ -1140,6 +1061,86 @@ class TestProfileMultipleDevice(MultipleDeviceTestCase): self.errors.verify_no_errors() + + @marks.testrail_id(6228) + @marks.high + def test_mobile_data_usage_complex_settings(self): + self.create_drivers(2) + device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1]) + device_1_home = device_1.create_user() + public_chat_name, public_chat_message = 'e2e-started-before', 'message to pub chat' + device_1_public = device_1_home.join_public_chat(public_chat_name) + device_1_public.send_message(public_chat_message) + + device_1_home.just_fyi('set mobile data to "OFF" and check that peer-to-peer connection is still working') + device_2_home = device_2.create_user() + device_2_home.toggle_mobile_data() + device_2_home.mobile_connection_off_icon.wait_for_visibility_of_element(20) + for element in device_2_home.continue_syncing_button, device_2_home.stop_syncing_button, device_2_home.remember_my_choice_checkbox: + if not element.is_element_displayed(10): + self.drivers[0].fail('Element %s is not not shown in "Syncing mobile" bottom sheet' % element.locator) + device_2_home.stop_syncing_button.click() + if not device_2_home.mobile_connection_off_icon.is_element_displayed(): + self.drivers[0].fail('No mobile connection OFF icon is shown') + device_2_home.mobile_connection_off_icon.click() + for element in device_2_home.connected_to_n_peers_text, device_2_home.waiting_for_wi_fi: + if not element.is_element_displayed(): + self.errors.append("Element '%s' is not shown in Connection status bottom sheet" % element.locator) + device_2_home.click_system_back_button() + device_2_public = device_2_home.join_public_chat(public_chat_name) + if device_2_public.chat_element_by_text(public_chat_message).is_element_displayed(30): + self.errors.append("Chat history was fetched with mobile data fetching off") + public_chat_new_message = 'new message' + device_1_public.send_message(public_chat_new_message) + if not device_2_public.chat_element_by_text(public_chat_new_message).is_element_displayed(30): + self.errors.append("Peer-to-peer connection is not working when mobile data fetching is off") + + device_2_home.just_fyi('set mobile data to "ON"') + device_2_home.home_button.click() + device_2_home.mobile_connection_off_icon.click() + device_2_home.use_mobile_data_switch.click() + if not device_2_home.connected_to_node_text.is_element_displayed(10): + self.errors.append("Not connected to history node after enabling fetching on mobile data") + device_2_home.click_system_back_button() + device_2_home.mobile_connection_on_icon.wait_for_visibility_of_element(10) + if not device_2_home.mobile_connection_on_icon.is_element_displayed(): + self.errors.append('No mobile connection ON icon is shown') + device_2_home.get_chat('#%s'% public_chat_name).click() + if not device_2_public.chat_element_by_text(public_chat_message).is_element_displayed(30): + self.errors.append("Chat history was not fetched with mobile data fetching ON") + + device_2_home.just_fyi('check redirect to sync settings by tappin "Sync" in connection status bottom sheet') + device_2_home.home_button.click() + device_2_home.mobile_connection_on_icon.click() + device_2_home.connection_settings_button.click() + if not device_2_home.element_by_translation_id("mobile-network-use-mobile").is_element_displayed(): + self.errors.append("Was not redirected to sync settings after tapping on Settings in connection bottom sheet") + + device_1_home.just_fyi("Check default preferences in Sync settings") + device_1_profile = device_1_home.profile_button.click() + device_1_profile.sync_settings_button.click() + if not device_1_profile.element_by_translation_id("mobile-network-use-wifi").is_element_displayed(): + self.errors.append("Mobile data is enabled by default") + device_1_profile.element_by_translation_id("mobile-network-use-wifi").click() + if device_1_profile.ask_me_when_on_mobile_network.text != "ON": + self.errors.append("'Ask me when on mobile network' is not enabled by default") + + device_1_profile.just_fyi("Disable 'ask me when on mobile network' and check that it is not shown") + device_1_profile.ask_me_when_on_mobile_network.click() + device_1_profile.toggle_mobile_data() + if device_1_profile.element_by_translation_id("mobile-network-start-syncing").is_element_displayed(20): + self.errors.append("Popup is shown, but 'ask me when on mobile network' is disabled") + + device_1_profile.just_fyi("Check 'Restore default' setting") + device_1_profile.element_by_text('Restore Defaults').click() + if device_1_profile.use_mobile_data.attribute_value("checked"): + self.errors.append("Mobile data is enabled by default") + if not device_1_profile.ask_me_when_on_mobile_network.attribute_value("checked"): + self.errors.append("'Ask me when on mobile network' is not enabled by default") + + self.errors.verify_no_errors() + + @marks.testrail_id(5680) @marks.high @marks.skip diff --git a/test/appium/tests/atomic/chats/test_commands.py b/test/appium/tests/atomic/chats/test_commands.py index 4901d16164..9c9a6619c4 100644 --- a/test/appium/tests/atomic/chats/test_commands.py +++ b/test/appium/tests/atomic/chats/test_commands.py @@ -138,7 +138,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase): home_2.just_fyi('Check that transaction message is fetched from offline and sign transaction') device_2.sign_in() - home_2.connection_status.wait_for_invisibility_of_element(30) + home_2.connection_offline_icon.wait_for_invisibility_of_element(30) home_2.get_chat(recipient_username).click() chat_2_sender_message = chat_2.get_outgoing_transaction() if not chat_2_sender_message.is_element_displayed(): @@ -153,8 +153,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase): chat_2.toggle_airplane_mode() self.network_api.wait_for_confirmation_of_transaction(sender['address'], amount, confirmations=15, token=True) chat_2.toggle_airplane_mode() - chat_2.connection_status.wait_for_invisibility_of_element(30) - [message.transaction_status.wait_for_element_text(message.confirmed) for message in + [message.transaction_status.wait_for_element_text(message.confirmed, wait_time=60) for message in (chat_2_sender_message, chat_1_request_message)] self.errors.verify_no_errors() diff --git a/test/appium/tests/atomic/chats/test_group_chat.py b/test/appium/tests/atomic/chats/test_group_chat.py index a57e93af2b..a2065ff2e2 100644 --- a/test/appium/tests/atomic/chats/test_group_chat.py +++ b/test/appium/tests/atomic/chats/test_group_chat.py @@ -98,7 +98,7 @@ class TestGroupChatMultipleDevice(MultipleDeviceTestCase): devices_home[2].toggle_airplane_mode() devices_chat[0].add_members_to_group_chat([devices_username[2]]) devices_home[2].toggle_airplane_mode() - devices_home[2].connection_status.wait_for_invisibility_of_element(60) + devices_home[2].connection_offline_icon.wait_for_invisibility_of_element(60) if not devices_home[2].get_chat(chat_name).is_element_displayed(): self.drivers[0].fail('Invite to group chat was not fetched from offline') devices_chat[2] = devices_home[2].get_chat(chat_name).click() @@ -112,10 +112,9 @@ class TestGroupChatMultipleDevice(MultipleDeviceTestCase): devices_chat[2].join_chat_button.click() devices_chat[2].send_message(message_after_adding) devices_chat[0].toggle_airplane_mode() - devices_chat[0].connection_status.wait_for_invisibility_of_element(60) for key in devices_chat: if not devices_chat[key].chat_element_by_text(message_after_adding).is_element_displayed( - 20): + 40): self.errors.append("Message with text '%s' was not received" % message_after_adding) devices_chat[0].just_fyi('Send message from old member and check that it is fetched') diff --git a/test/appium/tests/atomic/chats/test_keycard_commands.py b/test/appium/tests/atomic/chats/test_keycard_commands.py index e19b293c2f..2345c5d4d5 100644 --- a/test/appium/tests/atomic/chats/test_keycard_commands.py +++ b/test/appium/tests/atomic/chats/test_keycard_commands.py @@ -112,7 +112,6 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase): profile_2 = wallet_2.profile_button.click() profile_2.airplane_mode_button.click() device_2.home_button.double_click() - # device_2.click_system_home_button() chat_element = home_1.get_chat(sender['username']) chat_element.wait_for_visibility_of_element(30) chat_1 = chat_element.click() @@ -138,9 +137,10 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase): # if not device_2.element_by_text(transaction_request_pn).is_element_displayed(60): # self.errors.append("Push notification is not received after going back from offline") # device_2.element_by_text(transaction_request_pn).click() - home_2.connection_status.wait_for_invisibility_of_element(120) + home_2.connection_offline_icon.wait_for_invisibility_of_element(120) home_2.get_chat(recipient_username).click() chat_2_sender_message = chat_2.get_outgoing_transaction() + chat_2_sender_message.wait_for_visibility_of_element(60) chat_2_sender_message.transaction_status.wait_for_element_text(chat_2_sender_message.address_received) send_message = chat_2_sender_message.sign_and_send.click() send_message.next_button.click() @@ -150,8 +150,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase): chat_2.toggle_airplane_mode() self.network_api.wait_for_confirmation_of_transaction(sender['address'], amount, token=True) chat_2.toggle_airplane_mode() - chat_2.connection_status.wait_for_invisibility_of_element(60) - [message.transaction_status.wait_for_element_text(message.confirmed) for message in + [message.transaction_status.wait_for_element_text(message.confirmed, wait_time=60) for message in (chat_2_sender_message, chat_1_request_message)] self.errors.verify_no_errors() diff --git a/test/appium/tests/atomic/chats/test_one_to_one.py b/test/appium/tests/atomic/chats/test_one_to_one.py index 58498c439c..8adcffe5d9 100644 --- a/test/appium/tests/atomic/chats/test_one_to_one.py +++ b/test/appium/tests/atomic/chats/test_one_to_one.py @@ -102,25 +102,22 @@ class TestMessagesOneToOneChatMultiple(MultipleDeviceTestCase): home_1.just_fyi('turn on airplane mode and check that offline status is shown on home view') home_1.toggle_airplane_mode() - home_1.connection_status.wait_for_visibility_of_element(15) - if home_1.connection_status.text != 'Offline': - self.errors.append('Offline status is not shown in home screen') + home_1.connection_offline_icon.wait_and_click(20) + for element in home_1.not_connected_to_node_text, home_1.not_connected_to_peers_text: + if not element.is_element_displayed(): + self.errors.append('Element "%s" is not shown in Connection status screen if device is offline' % element.locator) + home_1.click_system_back_button() + profile_2 = home_2.profile_button.click() username_2 = profile_2.default_username_text.text profile_2.get_back_to_home_view() chat_2 = home_2.add_contact(public_key_1) message_1 = 'test message' chat_2.send_message(message_1) - - home_2.just_fyi('turn on airplane mode and check that offline status is shown on chat view') chat_2.toggle_airplane_mode() - chat_2.element_by_text('Offline').wait_for_visibility_of_element(15) - if chat_2.connection_status.text != 'Offline': - self.errors.append('Offline status is not shown in 1-1 chat') home_1.just_fyi('go back online and check that 1-1 chat will be fetched') home_1.toggle_airplane_mode() - home_1.connection_status.wait_for_invisibility_of_element(30) chat_element = home_1.get_chat(username_2) chat_element.wait_for_visibility_of_element(30) chat_1 = chat_element.click() @@ -129,8 +126,6 @@ class TestMessagesOneToOneChatMultiple(MultipleDeviceTestCase): home_1.just_fyi('checking offline fetching for another message') chat_2.toggle_airplane_mode() home_1.toggle_airplane_mode() - chat_2.element_by_text('Connecting to peers...').wait_for_invisibility_of_element(60) - chat_2.connection_status.wait_for_invisibility_of_element(60) message_2 = 'one more message' chat_2.send_message(message_2) home_1.toggle_airplane_mode() @@ -148,7 +143,7 @@ class TestMessagesOneToOneChatMultiple(MultipleDeviceTestCase): home_1 = profile_1.get_back_to_home_view() public_key_2 = home_2.get_public_key_and_username() profile_2 = home_2.get_profile_view() - profile_2.switch_network('Mainnet with upstream RPC') + profile_2.switch_network() chat_1 = home_1.add_contact(public_key_2) message = 'test message' @@ -431,7 +426,6 @@ class TestMessagesOneToOneChatMultiple(MultipleDeviceTestCase): device_2_chat = chat_element.click() if not device_2_chat.chat_element_by_text(message).is_element_displayed(): self.errors.append("Message with text '%s' was not received" % message) - device_2_chat.connection_status.wait_for_invisibility_of_element(60) device_2_chat.add_to_contacts.click() device_2_chat.get_back_to_home_view() diff --git a/test/appium/tests/atomic/transactions/test_wallet.py b/test/appium/tests/atomic/transactions/test_wallet.py index 81b45f6bb6..a4daba94e2 100644 --- a/test/appium/tests/atomic/transactions/test_wallet.py +++ b/test/appium/tests/atomic/transactions/test_wallet.py @@ -231,9 +231,8 @@ class TestTransactionWalletSingleDevice(SingleDeviceTestCase): self.driver.launch_app() SignInView(self.driver).sign_in() home.home_button.wait_for_visibility_of_element() - connection_text = home.connection_status.text - if connection_text != 'Offline': - self.driver.fail("Connection status text '%s' doesn't match expected 'Offline'" % connection_text) + home.connection_offline_icon.wait_for_visibility_of_element(20) + @marks.testrail_id(6225) @marks.transaction diff --git a/test/appium/views/base_view.py b/test/appium/views/base_view.py index 4b4335d821..82d1bacd13 100644 --- a/test/appium/views/base_view.py +++ b/test/appium/views/base_view.py @@ -221,13 +221,12 @@ class BaseView(object): self.next_button = Button(self.driver, translation_id="next") self.add_button = Button(self.driver, translation_id="add") self.save_button = Button(self.driver, translation_id="save") - self.done_button = Button(self.driver, translation_id="done") #self.locator = self.Locator.xpath_selector("//*[@content-desc='done-button' or contains(@text, 'Done')]") + self.done_button = Button(self.driver, translation_id="done") self.delete_button = Button(self.driver, translation_id="delete", uppercase=True) self.ok_continue_button = Button(self.driver, xpath="//*[@text='OK, CONTINUE' or @text='Okay, continue']") self.discard_button = Button(self.driver, xpath="//*[@text='DISCARD']") self.confirm_button = Button(self.driver, translation_id='confirm', uppercase=True) - self.connection_status = Text(self.driver, - xpath="//*[@content-desc='connection-status-text']/android.widget.TextView") + self.cross_icon = Button(self.driver, xpath="(//android.view.ViewGroup[@content-desc='icon'])[1]") self.native_close_button = Button(self.driver, id="android:id/aerr_close") self.show_roots_button = Button(self.driver, accessibility_id="Show roots") @@ -515,22 +514,6 @@ class BaseView(object): self.element_by_text_part(text).click() return self.get_chat_view() - def reconnect(self): - self.driver.info("**Reconnecting**") - connect_status = self.connection_status - for i in range(3): - if connect_status.is_element_displayed(5, ignored_exceptions=StaleElementReferenceException): - if 'Tap to reconnect' in connect_status.text: - try: - connect_status.click() - except AttributeError: - pass - try: - connect_status.wait_for_invisibility_of_element() - except TimeoutException as e: - if i == 2: - e.msg = "Device %s: Can't reconnect to mail server after 3 attempts" % self.driver.number - raise e def find_values_in_logcat(self, **kwargs): logcat = self.logcat diff --git a/test/appium/views/chat_view.py b/test/appium/views/chat_view.py index 0030803a70..2e52f2898d 100644 --- a/test/appium/views/chat_view.py +++ b/test/appium/views/chat_view.py @@ -114,7 +114,7 @@ class ChatElementByText(Text): try: return super(ChatElementByText, self).find_element() except NoSuchElementException: - ChatView(self.driver).reconnect() + self.wait_for_visibility_of_element(20) @property def image_in_reply(self): diff --git a/test/appium/views/home_view.py b/test/appium/views/home_view.py index c8d7797efd..8ed45abda5 100644 --- a/test/appium/views/home_view.py +++ b/test/appium/views/home_view.py @@ -34,9 +34,9 @@ class ChatElement(SilentButton): return super(ChatElement, self).find_element() except NoSuchElementException as e: if i == 0: - HomeView(self.driver).reconnect() + self.wait_for_visibility_of_element(20) else: - e.msg = 'Device %s: Unable to find chat with user %s' % (self.driver.number, self.username) + e.msg = 'Device %s: Unable to find chat with name %s' % (self.driver.number, self.username) raise e @property @@ -75,6 +75,25 @@ class HomeView(BaseView): self.clear_history_button = Button(self.driver, accessibility_id="clear-history-button") self.mark_all_messages_as_read_button = Button(self.driver, accessibility_id="mark-all-read-button") + # Connection icons + self.mobile_connection_off_icon = Button(self.driver, accessibility_id="conn-button-mobile-sync-off") + self.mobile_connection_on_icon = Button(self.driver, accessibility_id="conn-button-mobile-sync") + self.connection_offline_icon = Button(self.driver, accessibility_id="conn-button-offline") + + # Sync using mobile data bottom sheet + self.continue_syncing_button = Button(self.driver, accessibility_id="mobile-network-continue-syncing") + self.stop_syncing_button = Button(self.driver, accessibility_id="mobile-network-stop-syncing") + self.remember_my_choice_checkbox = Button(self.driver, xpath="//*[@content-desc='remember-choice']//*[@content-desc='checkbox']") + + # Connection status bottom sheet + self.connected_to_n_peers_text = Text(self.driver, accessibility_id="connected-to-n-peers") + self.connected_to_node_text = Text(self.driver, accessibility_id="connected-to-mailserver") + self.waiting_for_wi_fi = Text(self.driver, accessibility_id="waiting-wi-fi") + self.use_mobile_data_switch = Button(self.driver, accessibility_id="mobile-network-use-mobile") + self.connection_settings_button = Button(self.driver, accessibility_id="settings") + self.not_connected_to_node_text = Text(self.driver, accessibility_id="not-connected-nodes") + self.not_connected_to_peers_text = Text(self.driver, accessibility_id="not-connected-to-peers") + def wait_for_syncing_complete(self): self.driver.info('**Waiting for syncing complete:**') while True: