diff --git a/test/appium/tests/base_test_case.py b/test/appium/tests/base_test_case.py index 85c43b32d7..195ab604d5 100644 --- a/test/appium/tests/base_test_case.py +++ b/test/appium/tests/base_test_case.py @@ -3,11 +3,13 @@ import sys import re import subprocess import asyncio -from selenium.common.exceptions import WebDriverException -from tests import test_suite_data, start_threads + from os import environ from appium import webdriver from abc import ABCMeta, abstractmethod +from selenium.common.exceptions import WebDriverException +from tests import test_suite_data, start_threads +from views.base_view import BaseView class AbstractTestCase: @@ -54,7 +56,7 @@ class AbstractTestCase: desired_caps['build'] = pytest.config.getoption('build') desired_caps['name'] = test_suite_data.current_test.name desired_caps['platformName'] = 'Android' - desired_caps['appiumVersion'] = '1.7.1' + desired_caps['appiumVersion'] = '1.7.2' desired_caps['platformVersion'] = '6.0' desired_caps['deviceName'] = 'Android GoogleAPI Emulator' desired_caps['deviceOrientation'] = "portrait" @@ -69,7 +71,7 @@ class AbstractTestCase: desired_caps['app'] = pytest.config.getoption('apk') desired_caps['deviceName'] = 'nexus_5' desired_caps['platformName'] = 'Android' - desired_caps['appiumVersion'] = '1.7.1' + desired_caps['appiumVersion'] = '1.7.2' desired_caps['platformVersion'] = '6.0' desired_caps['newCommandTimeout'] = 600 desired_caps['fullReset'] = False @@ -113,6 +115,7 @@ class SingleDeviceTestCase(AbstractTestCase): self.driver = webdriver.Remote(capabilities[self.environment]['executor'], capabilities[self.environment]['capabilities']) self.driver.implicitly_wait(self.implicitly_wait) + BaseView(self.driver).accept_agreements() test_suite_data.current_test.jobs.append(self.driver.session_id) break except WebDriverException: @@ -137,6 +140,7 @@ class LocalMultipleDeviceTestCase(AbstractTestCase): for driver in range(quantity): self.drivers[driver] = webdriver.Remote(self.executor_local, capabilities[driver]) self.drivers[driver].implicitly_wait(self.implicitly_wait) + BaseView(self.drivers[driver]).accept_agreements() test_suite_data.current_test.jobs.append(self.drivers[driver].session_id) def teardown_method(self, method): @@ -164,6 +168,7 @@ class SauceMultipleDeviceTestCase(AbstractTestCase): self.capabilities_sauce_lab)) for driver in range(quantity): self.drivers[driver].implicitly_wait(self.implicitly_wait) + BaseView(self.drivers[driver]).accept_agreements() test_suite_data.current_test.jobs.append(self.drivers[driver].session_id) def teardown_method(self, method): diff --git a/test/appium/tests/test_messaging.py b/test/appium/tests/test_messaging.py index 11eeb7e348..472bbd260b 100644 --- a/test/appium/tests/test_messaging.py +++ b/test/appium/tests/test_messaging.py @@ -4,7 +4,7 @@ import pytest import emoji from tests.base_test_case import MultipleDeviceTestCase -from tests import group_chat_users +from tests import group_chat_users, get_current_time from views.sign_in_view import SignInView unicode_text_message = '%s%s%s%s %s%s%s%s%s%s%s' % (chr(355), chr(275), chr(353), chr(539), chr(1084), chr(949), @@ -106,7 +106,7 @@ class TestMessages(MultipleDeviceTestCase): home_1.add_contact(public_key) home_1.get_back_to_home_view() - chat_name = 'super_group_chat' + chat_name = 'a_chat_%s' % get_current_time() home_1.create_group_chat(sorted([username_2, username_3]), chat_name) chat_1 = home_1.get_chat_view() text_message = 'This is text message!' @@ -117,27 +117,27 @@ class TestMessages(MultipleDeviceTestCase): chat_2, chat_3 = home_2.get_chat_view(), home_3.get_chat_view() for chat in chat_2, chat_3: - chat.wait_for_messages_by_user(username_1, text_message, self.errors) + chat.wait_for_messages(username_1, text_message, self.errors) chat_2.chat_message_input.send_keys(emoji.emojize(emoji_name)) chat_2.send_message_button.click() for chat in chat_1, chat_3: - chat.wait_for_messages_by_user(username_2, emoji_unicode, self.errors) + chat.wait_for_messages(username_2, emoji_unicode, self.errors) message_with_emoji = 'message with emoji' chat_3.chat_message_input.send_keys(emoji.emojize('%s %s' % (message_with_emoji, emoji_name_1))) chat_3.send_message_button.click() for chat in chat_1, chat_2: - chat.wait_for_messages_by_user(username_3, '%s %s' % (message_with_emoji, emoji_unicode_1), self.errors) + chat.wait_for_messages(username_3, '%s %s' % (message_with_emoji, emoji_unicode_1), self.errors) chat_1.chat_message_input.send_keys(unicode_text_message) chat_1.send_message_button.click() for chat in chat_2, chat_3: - chat.wait_for_messages_by_user(username_1, unicode_text_message, self.errors) + chat.wait_for_messages(username_1, unicode_text_message, self.errors) - for chat in chat_1, chat_2, chat_3: - chat.delete_chat(chat_name, self.errors) + # for chat in chat_1, chat_2, chat_3: + # chat.delete_chat(chat_name, self.errors) self.verify_no_errors() @@ -160,7 +160,7 @@ class TestMessages(MultipleDeviceTestCase): for message in messages_to_send_1: chat_1.chat_message_input.send_keys(message) chat_1.send_message_button.click() - chat_2.wait_for_messages_by_user(users[0], messages_to_send_1, self.errors) + chat_2.wait_for_messages(users[0], messages_to_send_1, self.errors) message_with_emoji = 'message with emoji' messages_to_send_2 = [emoji.emojize(emoji_name), emoji.emojize('%s %s' % (message_with_emoji, emoji_name_1))] @@ -170,7 +170,7 @@ class TestMessages(MultipleDeviceTestCase): chat_2.send_message_button.click() chat_2.send_as_keyevent(message_with_new_line) chat_2.send_message_button.click() - chat_1.wait_for_messages_by_user(users[1], messages_to_receive_2, self.errors) + chat_1.wait_for_messages(users[1], messages_to_receive_2, self.errors) for chat in chat_1, chat_2: chat.delete_chat(chat_name, self.errors) self.verify_no_errors() diff --git a/test/appium/tests/test_profile.py b/test/appium/tests/test_profile.py index 63ff0f2467..1c80a8bebb 100644 --- a/test/appium/tests/test_profile.py +++ b/test/appium/tests/test_profile.py @@ -35,9 +35,13 @@ class TestProfileView(SingleDeviceTestCase): sign_in_view = SignInView(self.driver) sign_in_view.create_user() profile_view = sign_in_view.profile_button.click() + profile_view.advanced_button.click() sign_in_view = profile_view.switch_network('Rinkeby with upstream RPC') sign_in_view.first_account_button.click() sign_in_view.password_input.set_value('qwerty1234') sign_in_view.sign_in_button.click() - desired_network = sign_in_view.element_by_text('RINKEBY WITH UPSTREAM RPC') - sign_in_view.profile_button.click_until_presence_of_element(desired_network) + sign_in_view.profile_button.click_until_presence_of_element(profile_view.advanced_button) + profile_view.advanced_button.click() + desired_network = profile_view.element_by_text('RINKEBY WITH UPSTREAM RPC', 'text') + desired_network.scroll_to_element() + assert desired_network.is_element_displayed() diff --git a/test/appium/tests/test_sanity.py b/test/appium/tests/test_sanity.py index f2906ee09f..a6ee565b2f 100644 --- a/test/appium/tests/test_sanity.py +++ b/test/appium/tests/test_sanity.py @@ -68,7 +68,7 @@ class TestSanity(SingleDeviceTestCase): sign_in_view.create_user() home_view = sign_in_view.get_home_view() start_new_chat_view = home_view.plus_button.click() - start_new_chat_view.add_new_contact.click() + start_new_chat_view.start_new_chat_button.click() contact_jarrad = home_view.element_by_text('Jarrad', 'button') contact_jarrad.scroll_to_element() contact_jarrad.click() @@ -82,7 +82,7 @@ class TestSanity(SingleDeviceTestCase): sign_in_view.apps_button.click() sign_in_view.status_app_icon.scroll_to_element() sign_in_view.status_app_icon.click() - sign_in_view.ok_button_apk.click() + sign_in_view.ok_button.click() sign_in_view.first_account_button.click() sign_in_view.password_input.send_keys('qwerty1234') sign_in_view.sign_in_button.click() diff --git a/test/appium/tests/test_transaction.py b/test/appium/tests/test_transaction.py index 77ef3b4ac3..fc76e353d6 100644 --- a/test/appium/tests/test_transaction.py +++ b/test/appium/tests/test_transaction.py @@ -135,7 +135,7 @@ class TestTransaction(SingleDeviceTestCase): send_transaction.done_button.click_until_presence_of_element(send_transaction.sign_later_button) send_transaction.sign_later_button.click() send_transaction.yes_button.click() - send_transaction.ok_button_apk.click() + send_transaction.ok_button.click() transactions_view = wallet_view.transactions_button.click() transactions_view.unsigned_tab.click() transactions_view.sign_button.click() @@ -157,10 +157,6 @@ class TestTransaction(SingleDeviceTestCase): home_view.add_contact(recipient['public_key']) home_view.get_back_to_home_view() wallet_view = home_view.wallet_button.click() - wallet_view.options_button.click_until_presence_of_element(wallet_view.manage_assets_button) - wallet_view.manage_assets_button.click() - wallet_view.stt_check_box.click() - wallet_view.done_button.click() send_transaction = wallet_view.send_button.click() send_transaction.select_asset_button.click_until_presence_of_element(send_transaction.stt_button) send_transaction.stt_button.click() diff --git a/test/appium/views/base_element.py b/test/appium/views/base_element.py index e2494111e6..af6467e9e2 100644 --- a/test/appium/views/base_element.py +++ b/test/appium/views/base_element.py @@ -57,6 +57,15 @@ class BaseElement(object): seconds) raise exception + def wait_for_visibility_of_element(self, seconds=10): + try: + return WebDriverWait(self.driver, seconds)\ + .until(expected_conditions.visibility_of_element_located((self.locator.by, self.locator.value))) + except TimeoutException as exception: + exception.msg = "'%s' is not found on screen, using: '%s', during '%s' seconds" % (self.name, self.locator, + seconds) + raise exception + def scroll_to_element(self): for _ in range(9): try: @@ -68,8 +77,14 @@ class BaseElement(object): def is_element_present(self, sec=5): try: info('Wait for %s' % self.name) - self.wait_for_element(sec) - return True + return self.wait_for_element(sec) + except TimeoutException: + return False + + def is_element_displayed(self, sec=5): + try: + info('Wait for %s' % self.name) + return self.wait_for_visibility_of_element(sec) except TimeoutException: return False diff --git a/test/appium/views/base_view.py b/test/appium/views/base_view.py index d8111802cb..691a83185a 100644 --- a/test/appium/views/base_view.py +++ b/test/appium/views/base_view.py @@ -3,7 +3,7 @@ import base64 import zbarlight from tests import info from eth_keys import datatypes -from selenium.common.exceptions import NoSuchElementException +from selenium.common.exceptions import NoSuchElementException, TimeoutException from PIL import Image from datetime import datetime from io import BytesIO @@ -13,7 +13,7 @@ from views.base_element import BaseButton, BaseElement, BaseEditBox, BaseText class BackButton(BaseButton): def __init__(self, driver): super(BackButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@content-desc='toolbar-back-button']") + self.locator = self.Locator.accessibility_id('back-button') def click(self, times_to_click: int = 1): for _ in range(times_to_click): @@ -66,16 +66,16 @@ class OkButton(BaseButton): self.locator = self.Locator.xpath_selector("//*[@text='OK']") -class ContinueButtonAPK(BaseButton): +class ContinueButton(BaseButton): def __init__(self, driver): - super(ContinueButtonAPK, self).__init__(driver) + super(ContinueButton, self).__init__(driver) self.locator = self.Locator.xpath_selector("//*[@text='Continue']") class HomeButton(BaseButton): def __init__(self, driver): super(HomeButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Home']/..") + self.locator = self.Locator.accessibility_id('home-tab-button') def navigate(self): from views.home_view import HomeView @@ -85,7 +85,7 @@ class HomeButton(BaseButton): class WalletButton(BaseButton): def __init__(self, driver): super(WalletButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Wallet']/..") + self.locator = self.Locator.accessibility_id('wallet-tab-button') def click(self): from views.wallet_view import TransactionsButton @@ -100,7 +100,7 @@ class WalletButton(BaseButton): class ProfileButton(BaseButton): def __init__(self, driver): super(ProfileButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Profile']/..") + self.locator = self.Locator.accessibility_id('profile-tab-button') def navigate(self): from views.profile_view import ProfileView @@ -171,8 +171,8 @@ class BaseView(object): self.back_button = BackButton(self.driver) self.allow_button = AllowButton(self.driver) self.deny_button = DenyButton(self.driver) - self.continue_button_apk = ContinueButtonAPK(self.driver) - self.ok_button_apk = OkButton(self.driver) + self.continue_button = ContinueButton(self.driver) + self.ok_button = OkButton(self.driver) self.next_button = NextButton(self.driver) self.save_button = SaveButton(self.driver) self.done_button = DoneButton(self.driver) @@ -188,6 +188,14 @@ class BaseView(object): 'text': BaseText } + def accept_agreements(self): + for i in self.ok_button, self.continue_button: + try: + i.wait_for_element(4) + i.click() + except (NoSuchElementException, TimeoutException): + pass + @property def logcat(self): return self.driver.get_log("logcat") diff --git a/test/appium/views/chat_view.py b/test/appium/views/chat_view.py index 4187043f50..2dad97c2a3 100644 --- a/test/appium/views/chat_view.py +++ b/test/appium/views/chat_view.py @@ -121,7 +121,8 @@ class OpenInBrowserButton(BaseButton): class CommandsButton(BaseButton): def __init__(self, driver): super(CommandsButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector('(// android.view.ViewGroup[@ content-desc="icon"])[3]') + self.locator = self.Locator.xpath_selector( + '//*[@content-desc="chat-message-input"]/..//android.view.ViewGroup[@content-desc="icon"]') class ViewProfileButton(BaseButton): @@ -186,6 +187,22 @@ class ChatView(BaseView): errors.append('Not received messages from user %s: "%s"' % (username, ', '.join( [i for i in list(set(expected_messages) - set(received_messages))]))) + def wait_for_messages(self, username: str, expected_messages: list, errors: list, wait_time: int = 30): + expected_messages = expected_messages if type(expected_messages) == list else [expected_messages] + repeat = 0 + received_messages = list() + while repeat <= wait_time: + for message in expected_messages: + if self.element_by_text(message, 'text').is_element_present(1): + received_messages.append(message) + if not set(expected_messages) - set(received_messages): + break + time.sleep(3) + repeat += 3 + if set(expected_messages) - set(received_messages): + errors.append('Not received messages from user %s: "%s"' % (username, ', '.join( + [i for i in list(set(expected_messages) - set(received_messages))]))) + def send_eth_to_request(self, request, sender_password): gas_popup = self.element_by_text_part('Specify amount') request.click_until_presence_of_element(gas_popup) diff --git a/test/appium/views/console_view.py b/test/appium/views/console_view.py index 2105f48284..4147c5f7d3 100644 --- a/test/appium/views/console_view.py +++ b/test/appium/views/console_view.py @@ -45,15 +45,6 @@ class ConsoleView(BaseView): self.recover_button = RecoverButton(self.driver) self.chat_request_input = ChatRequestInput(self.driver) - self.accept_agreements() - - def accept_agreements(self): - for i in self.ok_button_apk, self.continue_button_apk: - try: - i.click() - except (NoSuchElementException, TimeoutException): - pass - def create_user(self): self.request_password_icon.click() self.chat_request_input.send_keys("qwerty1234") diff --git a/test/appium/views/contacts_view.py b/test/appium/views/contacts_view.py index e58b30f363..a0741ec5da 100644 --- a/test/appium/views/contacts_view.py +++ b/test/appium/views/contacts_view.py @@ -24,8 +24,7 @@ class PlusButton(BaseButton): class PublicKeyEditBox(BaseEditBox): def __init__(self, driver): super(PublicKeyEditBox, self).__init__(driver) - self.locator = \ - self.Locator.xpath_selector("//*[@text='Enter contact code']") + self.locator = self.Locator.accessibility_id('enter-contact-code-input') class ConfirmPublicKeyButton(BaseButton): diff --git a/test/appium/views/discover_view.py b/test/appium/views/discover_view.py deleted file mode 100644 index 02f77dcf94..0000000000 --- a/test/appium/views/discover_view.py +++ /dev/null @@ -1,28 +0,0 @@ -from views.base_view import BaseView -import time -from views.base_element import * - - -class AllRecent(BaseButton): - - def __init__(self, driver): - super(AllRecent, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Recent statuses']/..//*[@text='ALL']") - - -class AllPopular(BaseButton): - - def __init__(self, driver): - super(AllPopular, self).__init__(driver) - - self.locator = self.Locator.xpath_selector("//*[@text='Popular #hashtags']/..//*[@text='ALL']") - - -class DiscoverView(BaseView): - - def __init__(self, driver): - super(DiscoverView, self).__init__(driver) - - self.driver = driver - self.all_popular = AllPopular(self.driver) - self.all_recent = AllRecent(self.driver) diff --git a/test/appium/views/home_view.py b/test/appium/views/home_view.py index de0728d1ef..5480d7456a 100644 --- a/test/appium/views/home_view.py +++ b/test/appium/views/home_view.py @@ -14,6 +14,12 @@ class PlusButton(BaseButton): from views.start_new_chat_view import StartNewChatView return StartNewChatView(self.driver) + def click(self): + from views.start_new_chat_view import StartNewChatButton + desired_element = StartNewChatButton(self.driver) + self.click_until_presence_of_element(desired_element=desired_element) + return self.navigate() + class ConsoleButton(BaseButton): def __init__(self, driver): @@ -70,7 +76,7 @@ class HomeView(BaseView): def get_back_to_home_view(self): counter = 0 - while not self.home_button.is_element_present(): + while not self.home_button.is_element_displayed(2): try: if counter >= 5: return @@ -80,9 +86,11 @@ class HomeView(BaseView): def add_contact(self, public_key): start_new_chat = self.plus_button.click() - start_new_chat.add_new_contact.click() - start_new_chat.public_key_edit_box.send_keys(public_key) + start_new_chat.start_new_chat_button.click() + start_new_chat.public_key_edit_box.set_value(public_key) start_new_chat.confirm() + one_to_one_chat = self.get_chat_view() + one_to_one_chat.chat_message_input.wait_for_element(60) def create_group_chat(self, user_names_to_add: list, group_chat_name: str = 'new_group_chat'): start_new_chat = self.plus_button.click() diff --git a/test/appium/views/profile_drawer_view.py b/test/appium/views/profile_drawer_view.py deleted file mode 100644 index ce986f90be..0000000000 --- a/test/appium/views/profile_drawer_view.py +++ /dev/null @@ -1,36 +0,0 @@ -from views.base_view import BaseView -from views.base_element import * - - -class ProfileIcon(BaseButton): - def __init__(self, driver): - super(ProfileIcon, self).__init__(driver) - self.locator = self.Locator.accessibility_id('drawer-profile-icon') - - def navigate(self): - from views.profile_view import ProfileView - return ProfileView(self.driver) - - -class SwitchUsersButton(BaseButton): - def __init__(self, driver): - super(SwitchUsersButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//android.widget.TextView[@text='SWITCH USERS']") - - def click(self): - self.find_element().click() - info('Tap on %s' % self.name) - return self.navigate() - - def navigate(self): - from views.sign_in_view import SignInView - return SignInView(self.driver) - - -class ProfileDrawer(BaseView): - def __init__(self, driver): - super(ProfileDrawer, self).__init__(driver) - self.driver = driver - - self.profile_icon = ProfileIcon(self.driver) - self.switch_users_button = SwitchUsersButton(self.driver) diff --git a/test/appium/views/profile_view.py b/test/appium/views/profile_view.py index e35094f41d..492c5bb846 100644 --- a/test/appium/views/profile_view.py +++ b/test/appium/views/profile_view.py @@ -1,5 +1,4 @@ import time -import pytest from tests import info from views.base_element import BaseText, BaseButton, BaseEditBox from views.base_view import BaseView @@ -9,7 +8,7 @@ class PublicKeyText(BaseText): def __init__(self, driver): super(PublicKeyText, self).__init__(driver) - self.locator = self.Locator.xpath_selector('//*[contains(@text, "0x04")]') + self.locator = self.Locator.accessibility_id('address-text') @property def text(self): @@ -55,7 +54,7 @@ class NetworkSettingsButton(BaseButton): def __init__(self, driver): super(NetworkSettingsButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector('//*[@text="Network"]') + self.locator = self.Locator.accessibility_id('network-button') class NetworkButton(BaseButton): def __init__(self, driver, network): @@ -66,7 +65,7 @@ class NetworkSettingsButton(BaseButton): def __init__(self, driver): super(NetworkSettingsButton.ConnectButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector('//*[@text="CONNECT"]') + self.locator = self.Locator.accessibility_id('network-connect-button') class LogoutButton(BaseButton): @@ -96,29 +95,40 @@ class ShareMyContactKeyButton(BaseButton): def __init__(self, driver): super(ShareMyContactKeyButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector('//*[@text="SHARE MY CONTACT CODE"]') + self.locator = self.Locator.accessibility_id('share-my-contact-code-button') class EditButton(BaseButton): def __init__(self, driver): super(EditButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector('//*[@text="EDIT"]') + self.locator = self.Locator.accessibility_id('edit-button') class ConfirmButton(BaseButton): def __init__(self, driver): super(ConfirmButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector('(//android.view.ViewGroup[@content-desc="icon"])[1]') + self.locator = self.Locator.accessibility_id('done-button') class CrossIcon(BaseButton): def __init__(self, driver): super(CrossIcon, self).__init__(driver) - self.locator = self.Locator.xpath_selector( - '(// android.view.ViewGroup[@ content-desc="icon"])[1]/android.view.View') + self.locator = self.Locator.accessibility_id('done-button') + + +class AdvancedButton(BaseButton): + + def __init__(self, driver): + super(AdvancedButton, self).__init__(driver) + self.locator = self.Locator.xpath_selector('//*[@text="Advanced"]') + + def click(self): + self.scroll_to_element().click() + info('Tap on %s' % self.name) + return self.navigate() class ProfileView(BaseView): @@ -146,6 +156,7 @@ class ProfileView(BaseView): self.edit_button = EditButton(self.driver) self.confirm_button = ConfirmButton(self.driver) self.cross_icon = CrossIcon(self.driver) + self.advanced_button = AdvancedButton(self.driver) def switch_network(self, network): self.network_settings_button.scroll_to_element() diff --git a/test/appium/views/send_transaction_view.py b/test/appium/views/send_transaction_view.py index d8ff927003..306d38e399 100644 --- a/test/appium/views/send_transaction_view.py +++ b/test/appium/views/send_transaction_view.py @@ -1,32 +1,30 @@ from views.base_element import BaseButton, BaseEditBox from views.base_view import BaseView -from selenium.common.exceptions import NoSuchElementException, TimeoutException class FirstRecipient(BaseButton): def __init__(self, driver): super(FirstRecipient, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Choose recipient']/.." - "//android.widget.ImageView[@content-desc='chat-icon']") + self.locator = self.Locator.accessibility_id('chat-icon') class SignTransactionButton(BaseButton): def __init__(self, driver): super(SignTransactionButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='SIGN TRANSACTION']") + self.locator = self.Locator.accessibility_id('sign-transaction-button') class SignLaterButton(BaseButton): def __init__(self, driver): super(SignLaterButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='SIGN LATER']") + self.locator = self.Locator.accessibility_id('sign-later-button') class AmountEditBox(BaseEditBox, BaseButton): def __init__(self, driver): super(AmountEditBox, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Amount']/..//android.widget.EditText") + self.locator = self.Locator.accessibility_id('amount-input') class PasswordInput(BaseEditBox): @@ -38,7 +36,7 @@ class PasswordInput(BaseEditBox): class EnterPasswordInput(BaseEditBox): def __init__(self, driver): super(EnterPasswordInput, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//android.widget.EditText[@NAF='true']") + self.locator = self.Locator.accessibility_id('enter-password-input') class ConfirmButton(BaseButton): @@ -50,14 +48,14 @@ class ConfirmButton(BaseButton): class GotItButton(BaseButton): def __init__(self, driver): super(GotItButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='GOT IT']") + self.locator = self.Locator.accessibility_id('got-it-button') class ChooseRecipientButton(BaseButton): def __init__(self, driver): super(ChooseRecipientButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Specify recipient...']") + self.locator = self.Locator.accessibility_id('choose-recipient-button') def click(self): desired_element = EnterRecipientAddressButton(self.driver) @@ -85,7 +83,7 @@ class RecentRecipientsButton(BaseButton): class SelectAssetButton(BaseButton): def __init__(self, driver): super(SelectAssetButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector('(//android.view.ViewGroup[@content-desc="icon"])[4]/..') + self.locator = self.Locator.accessibility_id('choose-asset-button') class STTButton(BaseButton): diff --git a/test/appium/views/sign_in_view.py b/test/appium/views/sign_in_view.py index 501cce1f81..92f3eb9e86 100644 --- a/test/appium/views/sign_in_view.py +++ b/test/appium/views/sign_in_view.py @@ -1,4 +1,3 @@ -from selenium.common.exceptions import NoSuchElementException, TimeoutException from tests import get_current_time from views.base_element import BaseButton, BaseEditBox from views.base_view import BaseView @@ -89,15 +88,6 @@ class SignInView(BaseView): self.confirm_password_input = ConfirmPasswordInput(self.driver) self.name_input = NameInput(self.driver) - self.accept_agreements() - - def accept_agreements(self): - for i in self.ok_button_apk, self.continue_button_apk: - try: - i.click() - except (NoSuchElementException, TimeoutException): - pass - def create_user(self): self.create_account_button.click() self.password_input.set_value('qwerty1234') diff --git a/test/appium/views/start_new_chat_view.py b/test/appium/views/start_new_chat_view.py index e9dbdc6d39..f834ceaf68 100644 --- a/test/appium/views/start_new_chat_view.py +++ b/test/appium/views/start_new_chat_view.py @@ -2,60 +2,54 @@ from views.base_element import BaseButton, BaseEditBox from views.contacts_view import ContactsView -class AddNewContactButton(BaseButton): +class StartNewChatButton(BaseButton): def __init__(self, driver): - super(AddNewContactButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector( - "//android.widget.TextView[@text='Start new chat']") + super(StartNewChatButton, self).__init__(driver) + self.locator = self.Locator.accessibility_id('start-1-1-chat-button') class NewGroupChatButton(BaseButton): def __init__(self, driver): super(NewGroupChatButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector( - "//android.widget.TextView[@text='Start group chat']") + self.locator = self.Locator.accessibility_id('start-group-chat-button') class JoinPublicChatButton(BaseButton): def __init__(self, driver): super(JoinPublicChatButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector( - "//android.widget.TextView[@text='Join public chat']") + self.locator = self.Locator.accessibility_id('join-public-chat-button') class ChatNameEditBox(BaseEditBox): def __init__(self, driver): super(ChatNameEditBox, self).__init__(driver) - self.locator = \ - self.Locator.xpath_selector("//android.widget.EditText") + self.locator = self.Locator.accessibility_id('chat-name-input') class OpenDAapButton(BaseButton): def __init__(self, driver): super(OpenDAapButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector( - "//android.widget.TextView[@text='Open ÐApp']") + self.locator = self.Locator.accessibility_id('open-dapp-button') class OpenButton(BaseButton): def __init__(self, driver): super(OpenButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector( - "//android.widget.TextView[@text='Open']") + self.locator = self.Locator.accessibility_id('open-dapp-button') class ConfirmButton(BaseButton): def __init__(self, driver): super(ConfirmButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector('(//android.view.ViewGroup[@content-desc="icon"])[2]') + self.locator = self.Locator.accessibility_id('create-button') class EnterUrlEditbox(BaseEditBox): def __init__(self, driver): super(EnterUrlEditbox, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//android.widget.EditText") + self.locator = self.Locator.accessibility_id('dapp-url-input') class UsernameCheckbox(BaseButton): @@ -68,7 +62,7 @@ class StartNewChatView(ContactsView): def __init__(self, driver): super(StartNewChatView, self).__init__(driver) - self.add_new_contact = AddNewContactButton(self.driver) + self.start_new_chat_button = StartNewChatButton(self.driver) self.new_group_chat_button = NewGroupChatButton(self.driver) self.join_public_chat_button = JoinPublicChatButton(self.driver) diff --git a/test/appium/views/transactions_view.py b/test/appium/views/transactions_view.py index 66181a622c..707346e1ce 100644 --- a/test/appium/views/transactions_view.py +++ b/test/appium/views/transactions_view.py @@ -56,18 +56,18 @@ class TransactionTable(BaseElement): class HistoryTab(BaseButton): def __init__(self, driver): super(HistoryTab, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='HISTORY']") + self.locator = self.Locator.accessibility_id('history-button') class UnsignedTab(BaseButton): def __init__(self, driver): super(UnsignedTab, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='UNSIGNED']") + self.locator = self.Locator.accessibility_id('unsigned-transactions-button') class SignButton(BaseButton): def __init__(self, driver): super(UnsignedTab.SignButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='SIGN']") + self.locator = self.Locator.accessibility_id('sign-button') class TransactionsView(BaseView): diff --git a/test/appium/views/wallet_view.py b/test/appium/views/wallet_view.py index 4240f4365b..9fab1a8e43 100644 --- a/test/appium/views/wallet_view.py +++ b/test/appium/views/wallet_view.py @@ -7,7 +7,7 @@ class SendButton(BaseButton): def __init__(self, driver): super(SendButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Send transaction']") + self.locator = self.Locator.accessibility_id('send-transaction-button') def navigate(self): from views.send_transaction_view import SendTransactionView @@ -18,7 +18,7 @@ class RequestButton(BaseButton): def __init__(self, driver): super(RequestButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Receive transaction']") + self.locator = self.Locator.accessibility_id('receive-transaction-button') def navigate(self): from views.send_transaction_view import SendTransactionView @@ -29,21 +29,21 @@ class SendRequestButton(BaseButton): def __init__(self, driver): super(SendRequestButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='SEND REQUEST']") + self.locator = self.Locator.accessibility_id('sent-request-button') class ChooseRecipientButton(BaseButton): def __init__(self, driver): super(ChooseRecipientButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Choose recipient...']") + self.locator = self.Locator.accessibility_id('choose-recipient-button') class TransactionsButton(BaseButton): def __init__(self, driver): super(TransactionsButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Transaction History']") + self.locator = self.Locator.accessibility_id('transaction-history-button') def navigate(self): from views.transactions_view import TransactionsView @@ -71,13 +71,13 @@ class UsdTotalValueText(BaseText): class SendTransactionRequestButton(BaseButton): def __init__(self, driver): super(SendTransactionRequestButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='SEND A TRANSACTION REQUEST']") + self.locator = self.Locator.accessibility_id('sent-transaction-request-button') class OptionsButton(BaseButton): def __init__(self, driver): super(OptionsButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector('(//android.view.ViewGroup[@content-desc="icon"])[1]') + self.locator = self.Locator.accessibility_id('options-menu-button') class ManageAssetsButton(BaseButton): @@ -89,13 +89,13 @@ class ManageAssetsButton(BaseButton): class STTCheckBox(BaseButton): def __init__(self, driver): super(STTCheckBox, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='STT']//..//android.widget.CheckBox") + self.locator = self.Locator.xpath_selector("//*[@text='STT']/../android.widget.CheckBox") class DoneButton(BaseButton): def __init__(self, driver): super(DoneButton, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//*[@text='Done']") + self.locator = self.Locator.accessibility_id('done-button') class WalletView(BaseView):