added more atomic tests
Signed-off-by: Anton Danchenko <ant.danchenko@gmail.com>
This commit is contained in:
parent
96628caa9e
commit
3d86e646be
|
@ -28,25 +28,21 @@ class TestProfileSingleDevice(SingleDeviceTestCase):
|
||||||
sign_in_view.create_user()
|
sign_in_view.create_user()
|
||||||
profile_view = sign_in_view.profile_button.click()
|
profile_view = sign_in_view.profile_button.click()
|
||||||
profile_view.share_my_contact_key_button.click()
|
profile_view.share_my_contact_key_button.click()
|
||||||
|
public_key = profile_view.public_key_text.text
|
||||||
profile_view.share_button.click()
|
profile_view.share_button.click()
|
||||||
try:
|
profile_view.share_via_messenger()
|
||||||
profile_view.element_by_text('Gmail').is_element_displayed()
|
if not profile_view.element_by_text_part(public_key).is_element_present():
|
||||||
profile_view.element_by_text('Gmail', 'button').click()
|
self.errors.append("Can't share public key")
|
||||||
profile_view.element_by_text('Welcome to Gmail').wait_for_visibility_of_element()
|
|
||||||
except (NoSuchElementException, TimeoutException):
|
|
||||||
self.errors.append('Can\'t share contact code via email')
|
|
||||||
profile_view.click_system_back_button()
|
profile_view.click_system_back_button()
|
||||||
profile_view.cross_icon.click()
|
profile_view.cross_icon.click()
|
||||||
wallet = profile_view.wallet_button.click()
|
wallet = profile_view.wallet_button.click()
|
||||||
wallet.set_up_wallet()
|
wallet.set_up_wallet()
|
||||||
request = wallet.receive_transaction_button.click()
|
request = wallet.receive_transaction_button.click()
|
||||||
|
address = wallet.address_text.text
|
||||||
request.share_button.click()
|
request.share_button.click()
|
||||||
try:
|
wallet.share_via_messenger()
|
||||||
profile_view.element_by_text('Gmail').is_element_displayed()
|
if not wallet.element_by_text_part(address).is_element_present():
|
||||||
profile_view.element_by_text('Gmail', 'button').click()
|
self.errors.append("Can't share address")
|
||||||
profile_view.element_by_text('Welcome to Gmail').wait_for_visibility_of_element()
|
|
||||||
except (NoSuchElementException, TimeoutException):
|
|
||||||
self.errors.append('Can\'t share wallet address via email')
|
|
||||||
self.verify_no_errors()
|
self.verify_no_errors()
|
||||||
|
|
||||||
@marks.testrail_id(3704)
|
@marks.testrail_id(3704)
|
||||||
|
@ -112,3 +108,42 @@ class TestProfileSingleDevice(SingleDeviceTestCase):
|
||||||
if sign_in_view.profile_button.counter.is_element_displayed():
|
if sign_in_view.profile_button.counter.is_element_displayed():
|
||||||
self.errors.append('Profile button counter is shown after seed phrase backup')
|
self.errors.append('Profile button counter is shown after seed phrase backup')
|
||||||
self.verify_no_errors()
|
self.verify_no_errors()
|
||||||
|
|
||||||
|
@marks.testrail_id(3721)
|
||||||
|
def test_invite_friends(self):
|
||||||
|
sign_in_view = SignInView(self.driver)
|
||||||
|
home = sign_in_view.create_user()
|
||||||
|
wallet = home.wallet_button.click()
|
||||||
|
wallet.set_up_wallet()
|
||||||
|
wallet.receive_transaction_button.click()
|
||||||
|
address = wallet.address_text.text[2:]
|
||||||
|
wallet.get_back_to_home_view()
|
||||||
|
wallet.home_button.click()
|
||||||
|
start_new_chat = home.plus_button.click()
|
||||||
|
start_new_chat.invite_friends_button.click()
|
||||||
|
start_new_chat.share_via_messenger()
|
||||||
|
start_new_chat.find_text_part("Get Status at http://status.im?refCode=%s" % address)
|
||||||
|
|
||||||
|
@marks.testrail_id(3450)
|
||||||
|
def test_set_currency(self):
|
||||||
|
sign_in_view = SignInView(self.driver)
|
||||||
|
sign_in_view.create_user()
|
||||||
|
profile_view = sign_in_view.profile_button.click()
|
||||||
|
profile_view.set_currency('Euro (EUR)')
|
||||||
|
profile_view.get_back_to_home_view()
|
||||||
|
wallet_view = profile_view.wallet_button.click()
|
||||||
|
wallet_view.set_up_wallet()
|
||||||
|
assert '€' in wallet_view.total_amount_text.text
|
||||||
|
assert 'EUR' == wallet_view.currency_text.text
|
||||||
|
|
||||||
|
@marks.testrail_id(3707)
|
||||||
|
def test_add_custom_network(self):
|
||||||
|
sign_in_view = SignInView(self.driver)
|
||||||
|
sign_in_view.create_user()
|
||||||
|
profile_view = sign_in_view.profile_button.click()
|
||||||
|
profile_view.add_custom_network()
|
||||||
|
sign_in_view.click_account_by_position(0)
|
||||||
|
sign_in_view.sign_in()
|
||||||
|
profile_view = sign_in_view.profile_button.click()
|
||||||
|
profile_view.advanced_button.click()
|
||||||
|
profile_view.find_text_part('CUSTOM_ROPSTEN')
|
||||||
|
|
|
@ -1,74 +1,42 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from tests import marks, common_password, group_chat_users
|
from tests import marks, common_password
|
||||||
from tests.base_test_case import SingleDeviceTestCase, MultipleDeviceTestCase
|
from tests.base_test_case import SingleDeviceTestCase
|
||||||
from views.sign_in_view import SignInView
|
from views.sign_in_view import SignInView
|
||||||
|
|
||||||
|
|
||||||
@marks.all
|
|
||||||
@marks.account
|
|
||||||
class TestRecoverAccountMultipleDevice(MultipleDeviceTestCase):
|
|
||||||
|
|
||||||
@marks.testrail_id(759)
|
|
||||||
def test_recover_account(self):
|
|
||||||
self.create_drivers(2)
|
|
||||||
device, device_2 = self.drivers[0], self.drivers[1]
|
|
||||||
sign_in, sign_in_2 = SignInView(device), SignInView(device_2)
|
|
||||||
username_1 = 'user_1'
|
|
||||||
username_2 = group_chat_users['A_USER']['username']
|
|
||||||
home = sign_in.create_user(username_1)
|
|
||||||
home_2 = sign_in_2.recover_access(passphrase=group_chat_users['A_USER']['passphrase'],
|
|
||||||
password=group_chat_users['A_USER']['password'])
|
|
||||||
public_key = home.get_public_key()
|
|
||||||
chat_2 = home_2.add_contact(public_key)
|
|
||||||
message = 'test message'
|
|
||||||
chat_2.chat_message_input.send_keys(message)
|
|
||||||
chat_2.send_message_button.click()
|
|
||||||
device_2.quit()
|
|
||||||
|
|
||||||
profile = home.get_profile_view()
|
|
||||||
profile.backup_seed_phrase_button.click()
|
|
||||||
profile.ok_continue_button.click()
|
|
||||||
seed_phrase = profile.get_seed_phrase()
|
|
||||||
profile.back_button.click()
|
|
||||||
profile.advanced_button.click()
|
|
||||||
profile.debug_mode_toggle.click()
|
|
||||||
profile.home_button.click()
|
|
||||||
console_chat = home.get_chat_with_user('Status Console').click()
|
|
||||||
console_chat.send_faucet_request()
|
|
||||||
console_chat.get_back_to_home_view()
|
|
||||||
wallet = home.wallet_button.click()
|
|
||||||
wallet.set_up_wallet()
|
|
||||||
address = wallet.get_wallet_address()
|
|
||||||
wallet.wait_balance_changed_on_wallet_screen()
|
|
||||||
|
|
||||||
device.reset()
|
|
||||||
sign_in.accept_agreements()
|
|
||||||
sign_in.recover_access(passphrase=' '.join(seed_phrase.values()), password=common_password)
|
|
||||||
home.connection_status.wait_for_invisibility_of_element(30)
|
|
||||||
chat_element = home.get_chat_with_user(username_2)
|
|
||||||
if chat_element.is_element_displayed():
|
|
||||||
chat = chat_element.click()
|
|
||||||
if not chat.chat_element_by_text(message).is_element_displayed():
|
|
||||||
self.errors.append("Message with text '%s' was not received" % message)
|
|
||||||
chat.get_back_to_home_view()
|
|
||||||
else:
|
|
||||||
self.errors.append('Chat with user %s is not recovered' % username_2)
|
|
||||||
home.wallet_button.click()
|
|
||||||
wallet.set_up_wallet()
|
|
||||||
if wallet.get_wallet_address() != address:
|
|
||||||
self.errors.append('Wallet address is changed after recover')
|
|
||||||
if wallet.get_eth_value() != 0.1:
|
|
||||||
self.errors.append('Wallet balance is changed after recover')
|
|
||||||
if wallet.get_public_key() != public_key:
|
|
||||||
self.errors.append('Public key is changed after recover')
|
|
||||||
self.verify_no_errors()
|
|
||||||
|
|
||||||
|
|
||||||
@marks.all
|
@marks.all
|
||||||
@marks.account
|
@marks.account
|
||||||
class TestRecoverAccountSingleDevice(SingleDeviceTestCase):
|
class TestRecoverAccountSingleDevice(SingleDeviceTestCase):
|
||||||
|
|
||||||
|
@marks.testrail_id(759)
|
||||||
|
def test_recover_account(self):
|
||||||
|
sign_in = SignInView(self.driver)
|
||||||
|
home = sign_in.create_user()
|
||||||
|
public_key = home.get_public_key()
|
||||||
|
profile = home.get_profile_view()
|
||||||
|
profile.backup_seed_phrase_button.click()
|
||||||
|
profile.ok_continue_button.click()
|
||||||
|
seed_phrase = profile.get_seed_phrase()
|
||||||
|
profile.back_button.click()
|
||||||
|
wallet = profile.wallet_button.click()
|
||||||
|
wallet.set_up_wallet()
|
||||||
|
address = wallet.get_wallet_address()
|
||||||
|
self.driver.reset()
|
||||||
|
sign_in.accept_agreements()
|
||||||
|
sign_in.recover_access(passphrase=' '.join(seed_phrase.values()), password=common_password)
|
||||||
|
home.connection_status.wait_for_invisibility_of_element(30)
|
||||||
|
home.wallet_button.click()
|
||||||
|
wallet.set_up_wallet()
|
||||||
|
address2 = wallet.get_wallet_address()
|
||||||
|
if address2 != address:
|
||||||
|
self.errors.append('Wallet address is %s after recovery, but %s is expected' % (address2, address))
|
||||||
|
public_key2 = wallet.get_public_key()
|
||||||
|
if public_key2 != public_key:
|
||||||
|
self.errors.append('Public key is %s after recovery, but %s is expected' % (public_key2, public_key))
|
||||||
|
self.verify_no_errors()
|
||||||
|
|
||||||
|
@marks.skip
|
||||||
@marks.testrail_id(845)
|
@marks.testrail_id(845)
|
||||||
def test_recover_account_with_incorrect_passphrase(self):
|
def test_recover_account_with_incorrect_passphrase(self):
|
||||||
sign_in = SignInView(self.driver)
|
sign_in = SignInView(self.driver)
|
||||||
|
|
|
@ -69,9 +69,9 @@ class TestWallet(SingleDeviceTestCase):
|
||||||
transaction_details.copy_transaction_hash_button.click()
|
transaction_details.copy_transaction_hash_button.click()
|
||||||
transaction_details.get_back_to_home_view()
|
transaction_details.get_back_to_home_view()
|
||||||
wallet_view.home_button.click()
|
wallet_view.home_button.click()
|
||||||
chat_view = home_view.get_chat_with_user('user').click()
|
public_chat = home_view.join_public_chat('testchat')
|
||||||
chat_view.chat_message_input.paste_text_from_clipboard()
|
public_chat.chat_message_input.paste_text_from_clipboard()
|
||||||
if chat_view.chat_message_input.text != transaction_hash:
|
if public_chat.chat_message_input.text != transaction_hash:
|
||||||
pytest.fail('Transaction hash was not copied')
|
pytest.fail('Transaction hash was not copied')
|
||||||
|
|
||||||
@marks.testrail_id(3713)
|
@marks.testrail_id(3713)
|
||||||
|
|
|
@ -3,7 +3,7 @@ import string
|
||||||
import emoji
|
import emoji
|
||||||
import pytest
|
import pytest
|
||||||
from selenium.common.exceptions import TimeoutException
|
from selenium.common.exceptions import TimeoutException
|
||||||
from tests import marks, get_current_time, group_chat_users, transaction_users
|
from tests import marks, get_current_time, group_chat_users, basic_user
|
||||||
from tests.base_test_case import MultipleDeviceTestCase, SingleDeviceTestCase
|
from tests.base_test_case import MultipleDeviceTestCase, SingleDeviceTestCase
|
||||||
from views.sign_in_view import SignInView
|
from views.sign_in_view import SignInView
|
||||||
|
|
||||||
|
@ -366,20 +366,33 @@ class TestMessagesOneToOneChatSingle(SingleDeviceTestCase):
|
||||||
class TestChatManagement(SingleDeviceTestCase):
|
class TestChatManagement(SingleDeviceTestCase):
|
||||||
|
|
||||||
@marks.testrail_id(1428)
|
@marks.testrail_id(1428)
|
||||||
def test_clear_history(self):
|
def test_clear_history_one_to_one_chat(self):
|
||||||
recipient = transaction_users['E_USER']
|
|
||||||
sign_in_view = SignInView(self.driver)
|
sign_in_view = SignInView(self.driver)
|
||||||
sign_in_view.create_user()
|
home_view = sign_in_view.create_user()
|
||||||
home_view = sign_in_view.get_home_view()
|
chat_view = home_view.add_contact(basic_user['public_key'])
|
||||||
home_view.add_contact(recipient['public_key'])
|
for _ in range(2):
|
||||||
chat_view = home_view.get_chat_view()
|
|
||||||
for _ in range(4):
|
|
||||||
chat_view.chat_message_input.send_keys('test message')
|
chat_view.chat_message_input.send_keys('test message')
|
||||||
chat_view.send_message_button.click()
|
chat_view.send_message_button.click()
|
||||||
chat_view.clear_history()
|
chat_view.clear_history()
|
||||||
if not chat_view.no_messages_in_chat.is_element_present():
|
if not chat_view.no_messages_in_chat.is_element_present():
|
||||||
pytest.fail('Message history is shown')
|
pytest.fail('Message history is shown')
|
||||||
home_view.relogin()
|
home_view.relogin()
|
||||||
home_view.get_chat_with_user(recipient['username']).click()
|
home_view.get_chat_with_user(basic_user['username']).click()
|
||||||
if not chat_view.no_messages_in_chat.is_element_present():
|
if not chat_view.no_messages_in_chat.is_element_present():
|
||||||
pytest.fail('Message history is shown after re-login')
|
pytest.fail('Message history is shown after re-login')
|
||||||
|
|
||||||
|
@marks.testrail_id(3720)
|
||||||
|
def test_delete_one_to_one_chat_via_delete_button(self):
|
||||||
|
sign_in = SignInView(self.driver)
|
||||||
|
home = sign_in.create_user()
|
||||||
|
chat_view = home.add_contact(basic_user['public_key'])
|
||||||
|
for _ in range(2):
|
||||||
|
chat_view.chat_message_input.send_keys('test message')
|
||||||
|
chat_view.send_message_button.click()
|
||||||
|
chat_view.delete_chat()
|
||||||
|
if home.get_chat_with_user(basic_user['username']).is_element_present(10):
|
||||||
|
self.errors.append("One-to-one' chat is shown, but the chat has been deleted")
|
||||||
|
home.relogin()
|
||||||
|
if home.get_chat_with_user(basic_user['username']).is_element_present(10):
|
||||||
|
self.errors.append("One-to-one' chat is shown after re-login, but the chat has been deleted")
|
||||||
|
self.verify_no_errors()
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
import random
|
import pytest
|
||||||
import string
|
|
||||||
|
|
||||||
from tests import marks
|
from tests import marks
|
||||||
from tests.base_test_case import MultipleDeviceTestCase
|
from tests.base_test_case import MultipleDeviceTestCase
|
||||||
from views.sign_in_view import SignInView
|
from views.sign_in_view import SignInView
|
||||||
|
|
||||||
|
|
||||||
@marks.chat
|
@marks.chat
|
||||||
class TestMessagesPublicChat(MultipleDeviceTestCase):
|
class TestPublicChat(MultipleDeviceTestCase):
|
||||||
|
|
||||||
@marks.testrail_id(1383)
|
@marks.testrail_id(1383)
|
||||||
def test_public_chat(self):
|
def test_public_chat_messaging(self):
|
||||||
self.create_drivers(2)
|
self.create_drivers(2)
|
||||||
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||||
username_1, username_2 = 'user_1', 'user_2'
|
username_1, username_2 = 'user_1', 'user_2'
|
||||||
|
@ -39,3 +37,53 @@ class TestMessagesPublicChat(MultipleDeviceTestCase):
|
||||||
self.errors.append("Username '%s' is shown for the sender" % username_1)
|
self.errors.append("Username '%s' is shown for the sender" % username_1)
|
||||||
|
|
||||||
self.verify_no_errors()
|
self.verify_no_errors()
|
||||||
|
|
||||||
|
@marks.testrail_id(3706)
|
||||||
|
def test_public_chat_clear_history(self):
|
||||||
|
self.create_drivers(2)
|
||||||
|
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||||
|
chat_name = device_1.get_public_chat_name()
|
||||||
|
for sign_in in device_1, device_2:
|
||||||
|
home = sign_in.create_user()
|
||||||
|
home.join_public_chat(chat_name)
|
||||||
|
chat_1, chat_2 = device_1.get_chat_view(), device_2.get_chat_view()
|
||||||
|
message_1, message_2, message_3 = 'm1', 'm2', 'm3'
|
||||||
|
chat_1.chat_message_input.send_keys(message_1)
|
||||||
|
chat_1.send_message_button.click()
|
||||||
|
chat_2.element_by_text(message_1).is_element_present()
|
||||||
|
|
||||||
|
chat_2.chat_message_input.send_keys(message_2)
|
||||||
|
chat_2.send_message_button.click()
|
||||||
|
chat_1.element_by_text(message_2).is_element_present()
|
||||||
|
chat_1.chat_options.click()
|
||||||
|
chat_1.clear_history_button.click()
|
||||||
|
chat_1.clear_button.click()
|
||||||
|
chat_2.chat_message_input.send_keys(message_3)
|
||||||
|
chat_2.send_message_button.click()
|
||||||
|
chat_1.element_by_text(message_3).is_element_present()
|
||||||
|
for message in message_1, message_2:
|
||||||
|
if chat_1.element_starts_with_text(message).is_element_present():
|
||||||
|
pytest.fail("Message '%s' is shown, but public chat history has been cleared" % message)
|
||||||
|
home_1 = chat_1.get_back_to_home_view()
|
||||||
|
home_1.relogin()
|
||||||
|
home_1.element_by_text('#' + chat_name).click()
|
||||||
|
for message in message_1, message_2:
|
||||||
|
if chat_1.element_starts_with_text(message).is_element_present():
|
||||||
|
pytest.fail("Message '%s' is shown after re-login, but public chat history has been cleared" % message)
|
||||||
|
|
||||||
|
@marks.testrail_id(3720)
|
||||||
|
def test_delete_public_chat_via_delete_button(self):
|
||||||
|
self.create_drivers(1)
|
||||||
|
sign_in = SignInView(self.drivers[0])
|
||||||
|
home = sign_in.create_user()
|
||||||
|
chat_name = home.get_public_chat_name()
|
||||||
|
public_chat = home.join_public_chat(chat_name)
|
||||||
|
public_chat.chat_message_input.send_keys('takoe')
|
||||||
|
public_chat.send_message_button.click()
|
||||||
|
public_chat.delete_chat()
|
||||||
|
if home.element_by_text(chat_name).is_element_present(5):
|
||||||
|
self.errors.append("Public chat '%s' is shown, but the chat has been deleted" % chat_name)
|
||||||
|
home.relogin()
|
||||||
|
if home.element_by_text(chat_name).is_element_present(5):
|
||||||
|
self.errors.append("Public chat '%s' is shown after re-login, but the chat has been deleted" % chat_name)
|
||||||
|
self.verify_no_errors()
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
import pytest
|
||||||
|
from tests import transaction_users, marks
|
||||||
|
from tests.base_test_case import SingleDeviceTestCase
|
||||||
|
from views.sign_in_view import SignInView
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.all
|
||||||
|
class TestBrowsing(SingleDeviceTestCase):
|
||||||
|
|
||||||
|
@marks.testrail_id(1411)
|
||||||
|
def test_browse_page_with_non_english_text(self):
|
||||||
|
sign_in = SignInView(self.driver)
|
||||||
|
sign_in.create_user()
|
||||||
|
home_view = sign_in.get_home_view()
|
||||||
|
start_new_chat = home_view.plus_button.click()
|
||||||
|
start_new_chat.open_d_app_button.click()
|
||||||
|
start_new_chat.enter_url_editbox.set_value('www.wikipedia.org')
|
||||||
|
start_new_chat.confirm()
|
||||||
|
browsing_view = home_view.get_base_web_view()
|
||||||
|
browsing_view.wait_for_d_aap_to_load()
|
||||||
|
wiki_texts = ['Español', '日本語', 'Français', '中文', 'Português']
|
||||||
|
for wiki_text in wiki_texts:
|
||||||
|
browsing_view.find_text_part(wiki_text, 15)
|
||||||
|
|
||||||
|
@marks.testrail_id(1412)
|
||||||
|
def test_open_invalid_link(self):
|
||||||
|
sign_in = SignInView(self.driver)
|
||||||
|
sign_in.create_user()
|
||||||
|
home_view = sign_in.get_home_view()
|
||||||
|
start_new_chat = home_view.plus_button.click()
|
||||||
|
start_new_chat.open_d_app_button.click()
|
||||||
|
start_new_chat.enter_url_editbox.set_value('invalid.takoe')
|
||||||
|
start_new_chat.confirm()
|
||||||
|
browsing_view = home_view.get_base_web_view()
|
||||||
|
browsing_view.find_text_part('Unable to load page')
|
||||||
|
|
||||||
|
@marks.testrail_id(3705)
|
||||||
|
def test_connection_is_not_secure(self):
|
||||||
|
sign_in = SignInView(self.driver)
|
||||||
|
sign_in.create_user()
|
||||||
|
home_view = sign_in.get_home_view()
|
||||||
|
start_new_chat = home_view.plus_button.click()
|
||||||
|
start_new_chat.open_d_app_button.click()
|
||||||
|
start_new_chat.enter_url_editbox.set_value('google.com')
|
||||||
|
start_new_chat.confirm()
|
||||||
|
browsing_view = home_view.get_base_web_view()
|
||||||
|
browsing_view.find_full_text("Connection is not proven secure. Make sure you trust this site before signing "
|
||||||
|
"transactions or entering personal data.")
|
||||||
|
|
||||||
|
@marks.testrail_id(3731)
|
||||||
|
def test_swipe_to_delete_browser_entry(self):
|
||||||
|
sign_in = SignInView(self.driver)
|
||||||
|
home_view = sign_in.create_user()
|
||||||
|
start_new_chat = home_view.plus_button.click()
|
||||||
|
start_new_chat.open_d_app_button.click()
|
||||||
|
start_new_chat.enter_url_editbox.set_value('google.com')
|
||||||
|
start_new_chat.confirm()
|
||||||
|
browsing_view = home_view.get_base_web_view()
|
||||||
|
browsing_view.browser_cross_icon.click()
|
||||||
|
home_view.swipe_and_delete_chat('Browser')
|
||||||
|
home_view.relogin()
|
||||||
|
if home_view.get_chat_with_user('Browser').is_element_present(20):
|
||||||
|
pytest.fail('The browser entry is present after re-login')
|
|
@ -151,7 +151,7 @@ class BaseElement(object):
|
||||||
location, size = element.location, element.size
|
location, size = element.location, element.size
|
||||||
x, y = location['x'], location['y']
|
x, y = location['x'], location['y']
|
||||||
width, height = size['width'], size['height']
|
width, height = size['width'], size['height']
|
||||||
self.driver.swipe(start_x=x + width / 2, start_y=y + height / 2, end_x=x, end_y=y + height / 2)
|
self.driver.swipe(start_x=x + width * 2, start_y=y + height / 2, end_x=x, end_y=y + height / 2)
|
||||||
|
|
||||||
def long_press_element(self):
|
def long_press_element(self):
|
||||||
element = self.find_element()
|
element = self.find_element()
|
||||||
|
|
|
@ -280,7 +280,7 @@ class BaseView(object):
|
||||||
element.locator = element.Locator.text_selector(text)
|
element.locator = element.Locator.text_selector(text)
|
||||||
return element
|
return element
|
||||||
|
|
||||||
def element_by_text_part(self, text, element_type='base'):
|
def element_by_text_part(self, text, element_type='button'):
|
||||||
info("Looking for an element by text part: '%s'" % text)
|
info("Looking for an element by text part: '%s'" % text)
|
||||||
element = self.element_types[element_type](self.driver)
|
element = self.element_types[element_type](self.driver)
|
||||||
element.locator = element.Locator.text_part_selector(text)
|
element.locator = element.Locator.text_part_selector(text)
|
||||||
|
@ -298,6 +298,12 @@ class BaseView(object):
|
||||||
element.locator = element.Locator.xpath_selector("//*[starts-with(@text,'%s')]" % text)
|
element.locator = element.Locator.xpath_selector("//*[starts-with(@text,'%s')]" % text)
|
||||||
return element.wait_for_element(wait_time)
|
return element.wait_for_element(wait_time)
|
||||||
|
|
||||||
|
def element_by_accessibility_id(self, accessibility_id, element_type='button'):
|
||||||
|
info("Looking for an element by text: '%s'" % accessibility_id)
|
||||||
|
element = self.element_types[element_type](self.driver)
|
||||||
|
element.locator = element.Locator.accessibility_id(accessibility_id)
|
||||||
|
return element
|
||||||
|
|
||||||
def swipe_down(self):
|
def swipe_down(self):
|
||||||
self.driver.swipe(500, 500, 500, 1000)
|
self.driver.swipe(500, 500, 500, 1000)
|
||||||
|
|
||||||
|
@ -358,6 +364,7 @@ class BaseView(object):
|
||||||
self.back_button.click()
|
self.back_button.click()
|
||||||
except (NoSuchElementException, TimeoutException):
|
except (NoSuchElementException, TimeoutException):
|
||||||
counter += 1
|
counter += 1
|
||||||
|
return self.get_home_view()
|
||||||
|
|
||||||
def relogin(self, password=common_password):
|
def relogin(self, password=common_password):
|
||||||
self.get_back_to_home_view()
|
self.get_back_to_home_view()
|
||||||
|
@ -377,3 +384,10 @@ class BaseView(object):
|
||||||
public_key = profile_view.public_key_text.text
|
public_key = profile_view.public_key_text.text
|
||||||
profile_view.cross_icon.click()
|
profile_view.cross_icon.click()
|
||||||
return public_key
|
return public_key
|
||||||
|
|
||||||
|
def share_via_messenger(self):
|
||||||
|
self.element_by_text('Messenger').click()
|
||||||
|
self.element_by_text('NEW MESSAGE').click()
|
||||||
|
self.send_as_keyevent('+0')
|
||||||
|
self.confirm()
|
||||||
|
self.element_by_accessibility_id('Send Message').click()
|
||||||
|
|
|
@ -302,14 +302,10 @@ class ChatView(BaseView):
|
||||||
self.send_message_button.click_until_presence_of_element(send_transaction.sign_transaction_button)
|
self.send_message_button.click_until_presence_of_element(send_transaction.sign_transaction_button)
|
||||||
send_transaction.sign_transaction(sender_password)
|
send_transaction.sign_transaction(sender_password)
|
||||||
|
|
||||||
def delete_chat(self, chat_name: str, errors: list):
|
def delete_chat(self):
|
||||||
self.chat_options.click()
|
self.chat_options.click()
|
||||||
self.delete_chat_button.click()
|
self.delete_chat_button.click()
|
||||||
self.delete_button.click()
|
self.delete_button.click()
|
||||||
from views.home_view import HomeView
|
|
||||||
if not HomeView(self.driver).plus_button.is_element_present() or \
|
|
||||||
self.element_by_text(chat_name).is_element_present():
|
|
||||||
errors.append('Chat was not deleted')
|
|
||||||
|
|
||||||
def clear_history(self):
|
def clear_history(self):
|
||||||
self.chat_options.click()
|
self.chat_options.click()
|
||||||
|
|
|
@ -231,13 +231,49 @@ class SelectFromGalleryButton(BaseButton):
|
||||||
self.locator = self.Locator.xpath_selector("//*[@text='Select from gallery']")
|
self.locator = self.Locator.xpath_selector("//*[@text='Select from gallery']")
|
||||||
|
|
||||||
|
|
||||||
|
class MainCurrencyButton(BaseButton):
|
||||||
|
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(MainCurrencyButton, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.accessibility_id("currency-button")
|
||||||
|
|
||||||
|
|
||||||
|
class NetworkPlusButton(BaseButton):
|
||||||
|
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(NetworkPlusButton, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.xpath_selector("(//android.view.ViewGroup[@content-desc='icon'])[2]")
|
||||||
|
|
||||||
|
|
||||||
|
class RopstenChainButton(BaseButton):
|
||||||
|
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(RopstenChainButton, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.xpath_selector(
|
||||||
|
"//*[contains(@text,'Ropsten test network')]/following-sibling::android.widget.CheckBox[1]")
|
||||||
|
|
||||||
|
|
||||||
|
class CustomNetworkName(BaseEditBox):
|
||||||
|
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(CustomNetworkName, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.xpath_selector("//*[@text='Name']/following-sibling::*[1]/android.widget.EditText")
|
||||||
|
|
||||||
|
|
||||||
|
class CustomNetworkURL(BaseEditBox):
|
||||||
|
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(CustomNetworkURL, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.xpath_selector(
|
||||||
|
"//*[@text='RPC URL']/following-sibling::*[1]/android.widget.EditText")
|
||||||
|
|
||||||
|
|
||||||
class ProfileView(BaseView):
|
class ProfileView(BaseView):
|
||||||
|
|
||||||
def __init__(self, driver):
|
def __init__(self, driver):
|
||||||
super(ProfileView, self).__init__(driver)
|
super(ProfileView, self).__init__(driver)
|
||||||
self.driver = driver
|
self.driver = driver
|
||||||
|
|
||||||
# old design
|
|
||||||
self.options_button = OptionsButton(self.driver)
|
self.options_button = OptionsButton(self.driver)
|
||||||
self.username_input = OptionsButton.UsernameInput(self.driver)
|
self.username_input = OptionsButton.UsernameInput(self.driver)
|
||||||
self.user_status_box = OptionsButton.UserStatusBox(self.driver)
|
self.user_status_box = OptionsButton.UserStatusBox(self.driver)
|
||||||
|
@ -246,12 +282,16 @@ class ProfileView(BaseView):
|
||||||
self.profile_address_text = ProfileAddressText(self.driver)
|
self.profile_address_text = ProfileAddressText(self.driver)
|
||||||
|
|
||||||
self.network_settings_button = NetworkSettingsButton(self.driver)
|
self.network_settings_button = NetworkSettingsButton(self.driver)
|
||||||
|
self.network_plus_button = NetworkPlusButton(self.driver)
|
||||||
|
self.ropsten_chain_button = RopstenChainButton(self.driver)
|
||||||
|
self.custom_network_url = CustomNetworkURL(self.driver)
|
||||||
|
self.custom_network_name = CustomNetworkName(self.driver)
|
||||||
self.connect_button = NetworkSettingsButton.ConnectButton(self.driver)
|
self.connect_button = NetworkSettingsButton.ConnectButton(self.driver)
|
||||||
self.logout_button = LogoutButton(self.driver)
|
self.logout_button = LogoutButton(self.driver)
|
||||||
self.logout_dialog = LogoutDialog(self.driver)
|
self.logout_dialog = LogoutDialog(self.driver)
|
||||||
self.confirm_logout_button = ConfirmLogoutButton(self.driver)
|
self.confirm_logout_button = ConfirmLogoutButton(self.driver)
|
||||||
|
|
||||||
# new design
|
self.main_currency_button = MainCurrencyButton(self.driver)
|
||||||
|
|
||||||
self.username_text = UserNameText(self.driver)
|
self.username_text = UserNameText(self.driver)
|
||||||
self.share_my_contact_key_button = ShareMyContactKeyButton(self.driver)
|
self.share_my_contact_key_button = ShareMyContactKeyButton(self.driver)
|
||||||
|
@ -284,6 +324,20 @@ class ProfileView(BaseView):
|
||||||
from views.sign_in_view import SignInView
|
from views.sign_in_view import SignInView
|
||||||
return SignInView(self.driver)
|
return SignInView(self.driver)
|
||||||
|
|
||||||
|
def add_custom_network(self):
|
||||||
|
self.advanced_button.click()
|
||||||
|
self.debug_mode_toggle.click()
|
||||||
|
self.network_settings_button.scroll_to_element()
|
||||||
|
self.network_settings_button.click()
|
||||||
|
self.network_plus_button.click_until_presence_of_element(self.ropsten_chain_button)
|
||||||
|
self.ropsten_chain_button.click()
|
||||||
|
self.custom_network_url.send_keys('https://ropsten.infura.io/iMko0kJNQUdhbCSaJcox')
|
||||||
|
self.custom_network_name.send_keys('custom_ropsten')
|
||||||
|
self.save_button.click()
|
||||||
|
self.element_by_text_part('custom_ropsten').click_until_presence_of_element(self.connect_button)
|
||||||
|
self.connect_button.click()
|
||||||
|
return self.get_sign_in_view()
|
||||||
|
|
||||||
def get_address(self):
|
def get_address(self):
|
||||||
profile_view = self.profile_button.click()
|
profile_view = self.profile_button.click()
|
||||||
return profile_view.profile_address_text.text
|
return profile_view.profile_address_text.text
|
||||||
|
@ -324,3 +378,9 @@ class ProfileView(BaseView):
|
||||||
self.logout_button.click()
|
self.logout_button.click()
|
||||||
return self.logout_dialog.logout_button.click()
|
return self.logout_dialog.logout_button.click()
|
||||||
|
|
||||||
|
def set_currency(self, desired_currency='Euro (EUR)'):
|
||||||
|
self.main_currency_button.click()
|
||||||
|
desired_currency = self.element_by_text(desired_currency)
|
||||||
|
desired_currency.scroll_to_element()
|
||||||
|
desired_currency.click()
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,12 @@ class UsernameCheckbox(BaseButton):
|
||||||
self.locator = self.Locator.xpath_selector("//*[@text='%s']/../../android.widget.CheckBox" % username)
|
self.locator = self.Locator.xpath_selector("//*[@text='%s']/../../android.widget.CheckBox" % username)
|
||||||
|
|
||||||
|
|
||||||
|
class InviteFriendsButton(BaseButton):
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(InviteFriendsButton, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.accessibility_id('invite-friends-button')
|
||||||
|
|
||||||
|
|
||||||
class StartNewChatView(ContactsView):
|
class StartNewChatView(ContactsView):
|
||||||
def __init__(self, driver):
|
def __init__(self, driver):
|
||||||
super(StartNewChatView, self).__init__(driver)
|
super(StartNewChatView, self).__init__(driver)
|
||||||
|
@ -68,6 +74,7 @@ class StartNewChatView(ContactsView):
|
||||||
|
|
||||||
self.open_d_app_button = OpenDAppButton(self.driver)
|
self.open_d_app_button = OpenDAppButton(self.driver)
|
||||||
self.open_button = OpenButton(self.driver)
|
self.open_button = OpenButton(self.driver)
|
||||||
|
self.invite_friends_button = InviteFriendsButton(self.driver)
|
||||||
|
|
||||||
self.chat_name_editbox = ChatNameEditBox(self.driver)
|
self.chat_name_editbox = ChatNameEditBox(self.driver)
|
||||||
self.enter_url_editbox = EnterUrlEditbox(self.driver)
|
self.enter_url_editbox = EnterUrlEditbox(self.driver)
|
||||||
|
|
|
@ -144,6 +144,20 @@ class AssetCheckBox(BaseButton):
|
||||||
self.locator = self.Locator.xpath_selector("//*[@text='%s']/../android.widget.CheckBox" % asset_name)
|
self.locator = self.Locator.xpath_selector("//*[@text='%s']/../android.widget.CheckBox" % asset_name)
|
||||||
|
|
||||||
|
|
||||||
|
class TotalAmountText(BaseText):
|
||||||
|
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(TotalAmountText, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.accessibility_id('total-amount-value-text')
|
||||||
|
|
||||||
|
|
||||||
|
class CurrencyText(BaseText):
|
||||||
|
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(CurrencyText, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.accessibility_id('total-amount-currency-text')
|
||||||
|
|
||||||
|
|
||||||
class WalletView(BaseView):
|
class WalletView(BaseView):
|
||||||
def __init__(self, driver):
|
def __init__(self, driver):
|
||||||
super(WalletView, self).__init__(driver)
|
super(WalletView, self).__init__(driver)
|
||||||
|
@ -169,6 +183,9 @@ class WalletView(BaseView):
|
||||||
self.set_up_button = SetUpButton(self.driver)
|
self.set_up_button = SetUpButton(self.driver)
|
||||||
self.sign_in_phrase = SignInPhraseText(self.driver)
|
self.sign_in_phrase = SignInPhraseText(self.driver)
|
||||||
|
|
||||||
|
self.total_amount_text = TotalAmountText(self.driver)
|
||||||
|
self.currency_text = CurrencyText(self.driver)
|
||||||
|
|
||||||
def get_usd_total_value(self):
|
def get_usd_total_value(self):
|
||||||
import re
|
import re
|
||||||
return float(re.sub('[$,]', '', self.usd_total_value.text))
|
return float(re.sub('[$,]', '', self.usd_total_value.text))
|
||||||
|
|
|
@ -46,6 +46,17 @@ class AlwaysButton(BaseButton):
|
||||||
self.locator = self.Locator.text_part_selector('ALWAYS')
|
self.locator = self.Locator.text_part_selector('ALWAYS')
|
||||||
|
|
||||||
|
|
||||||
|
class BrowserCrossIcon(BaseButton):
|
||||||
|
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(BrowserCrossIcon, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.xpath_selector('(//android.view.ViewGroup[@content-desc="icon"])[1]')
|
||||||
|
|
||||||
|
def navigate(self):
|
||||||
|
from views.home_view import HomeView
|
||||||
|
return HomeView(self.driver)
|
||||||
|
|
||||||
|
|
||||||
class BaseWebView(BaseView):
|
class BaseWebView(BaseView):
|
||||||
|
|
||||||
def __init__(self, driver):
|
def __init__(self, driver):
|
||||||
|
@ -61,6 +72,7 @@ class BaseWebView(BaseView):
|
||||||
|
|
||||||
self.web_view_browser = WebViewBrowserButton(self.driver)
|
self.web_view_browser = WebViewBrowserButton(self.driver)
|
||||||
self.always_button = AlwaysButton(self.driver)
|
self.always_button = AlwaysButton(self.driver)
|
||||||
|
self.browser_cross_icon = BrowserCrossIcon(self.driver)
|
||||||
|
|
||||||
def wait_for_d_aap_to_load(self, wait_time=35):
|
def wait_for_d_aap_to_load(self, wait_time=35):
|
||||||
counter = 0
|
counter = 0
|
||||||
|
|
Loading…
Reference in New Issue