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