Changed xpath locators to accessibility labels in end to end tests
Signed-off-by: Anton Danchenko <ant.danchenko@gmail.com>
This commit is contained in:
parent
1248a469a6
commit
b0a2bbe27b
|
@ -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):
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
|
@ -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()
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue