status-mobile/test/appium/views/profile_view.py
Gheorghe Pinzaru 497af38a7f
Update usage for toolbars
Replace all the usage of the button without component

Use quo

Fix tests

List item in multiaccounts

Use list items in contacts

Fix welcome  screen button

Experiment long press

Big list item

Remove old bottom sheet

Use bottom sheet

Keycard

Add error to list item

Stickers panel button

Images panel

Fix z-index in profile

Fix android crash

Fix signing list item

Try fixing test

iOs gas sheet keyboard

Disable root alert in e2e

keycard signing sheet height

Clean up bottom sheet events

Replace flat list in profile

Memorise the manual-close value for bottom sheet

Mailserver QR scanner

Fix e2e tests

E2e fix 2

Fix e2e 3

Remove extra fn

Reduce bridging time for animation

Trick android layout

Try hooks

Fix profile missing ens-name

Disable press on control in list-view

allow disabling animations in list item

Use simple list in wallet assets settings

TBD - this screen should be rewritten from scratch. Now on every interaction the full list is re-rendered, also it makes the wallet main screen to re-render.

Fix send sheet

Handle long press in main thread

UI fixes

perf

Update e2e

fix missing user name in image long press

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-07-06 13:35:50 +03:00

776 lines
28 KiB
Python

import time
from tests.base_test_case import AbstractTestCase
from views.base_element import BaseText, BaseButton, BaseEditBox, BaseElement
from views.base_view import BaseView
class PublicKeyText(BaseText):
def __init__(self, driver):
super(PublicKeyText, self).__init__(driver)
self.locator = self.Locator.accessibility_id('chat-key')
class ProfileAddressText(BaseText):
def __init__(self, driver):
super(ProfileAddressText, self).__init__(driver)
self.locator = self.Locator.accessibility_id('profile-public-key')
@property
def text(self):
text = self.scroll_to_element().text
self.driver.info('%s is %s' % (self.name, text))
return text
class OptionsButton(BaseButton):
def __init__(self, driver):
super(OptionsButton, self).__init__(driver)
self.locator = self.Locator.xpath_selector(
'(//android.view.ViewGroup[@content-desc="icon"])[2]')
class UserStatusBox(BaseButton):
def __init__(self, driver):
super(OptionsButton.UserStatusBox, self).__init__(driver)
self.locator = self.Locator.xpath_selector('(//android.widget.ScrollView)[2]//android.widget.TextView')
class UsernameInput(BaseEditBox):
def __init__(self, driver):
super(OptionsButton.UsernameInput, self).__init__(driver)
self.locator = self.Locator.accessibility_id('username-input')
class UserStatusInput(BaseEditBox):
def __init__(self, driver):
super(OptionsButton.UserStatusInput, self).__init__(driver)
self.locator = self.Locator.xpath_selector('(//android.widget.EditText)[2]')
class NetworkSettingsButton(BaseButton):
def __init__(self, driver):
super(NetworkSettingsButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('network-button')
class NetworkButton(BaseButton):
def __init__(self, driver, network):
super(NetworkSettingsButton.NetworkButton, self).__init__(driver)
self.locator = self.Locator.text_selector(network)
class ConnectButton(BaseButton):
def __init__(self, driver):
super(NetworkSettingsButton.ConnectButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('network-connect-button')
class LogoutButton(BaseButton):
def __init__(self, driver):
super(LogoutButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('log-out-button')
def click(self):
self.scroll_to_element().click()
self.driver.info('Tap on %s' % self.name)
return self.navigate()
class LogoutDialog(BaseView):
def __init__(self, driver):
super(LogoutDialog, self).__init__(driver)
self.logout_button = LogoutDialog.LogoutButton(driver)
class LogoutButton(BaseButton):
def __init__(self, driver):
super(LogoutDialog.LogoutButton, self).__init__(driver)
self.locator = self.Locator.xpath_selector("//*[@text='LOG OUT' or @text='Log out']")
def navigate(self):
from views.sign_in_view import SignInView
return SignInView(self.driver)
class ConfirmLogoutButton(BaseButton):
def __init__(self, driver):
super(ConfirmLogoutButton, self).__init__(driver)
self.locator = self.Locator.text_selector('LOG OUT')
class DefaultUserNameText(BaseText):
def __init__(self, driver):
super(DefaultUserNameText, self).__init__(driver)
self.locator = self.Locator.accessibility_id('default-username')
class ENSusernames(BaseButton):
def __init__(self, driver):
super(ENSusernames, self).__init__(driver)
self.locator = self.Locator.text_selector('ENS usernames')
def navigate(self):
from views.dapps_view import DappsView
return DappsView(self.driver)
def click(self):
self.scroll_to_element().click()
return self.navigate()
class ShareMyProfileButton(BaseButton):
def __init__(self, driver):
super(ShareMyProfileButton, self).__init__(driver)
self.locator = self.Locator.xpath_selector('(//android.view.ViewGroup[@content-desc="icon"])[1]')
class ProfilePictureElement(BaseElement):
def __init__(self, driver):
super(ProfilePictureElement, self).__init__(driver)
self.locator = self.Locator.accessibility_id('chat-icon')
class ProfileDetailsOtherUser(BaseElement):
def __init__(self, driver):
super(ProfileDetailsOtherUser, self).__init__(driver)
self.locator = self.Locator.accessibility_id('profile-public-key')
class EditPictureButton(BaseButton):
def __init__(self, driver):
super(EditPictureButton, self).__init__(driver)
self.locator = self.Locator.xpath_selector(
'//android.view.ViewGroup[@content-desc="edit-profile-photo-button"]')
class ConfirmEditButton(BaseButton):
def __init__(self, driver):
super(ConfirmEditButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('done-button')
class CrossIcon(BaseButton):
def __init__(self, driver):
super(CrossIcon, self).__init__(driver)
self.locator = self.Locator.accessibility_id('done-button')
class ENSUsernameInShareChatKeyPopup(BaseText):
def __init__(self, driver):
super(ENSUsernameInShareChatKeyPopup, self).__init__(driver)
self.locator = self.Locator.accessibility_id('ens-username')
class AdvancedButton(BaseButton):
def __init__(self, driver):
super(AdvancedButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('advanced-button')
def click(self):
self.scroll_to_element().click()
self.driver.info('Tap on %s' % self.name)
return self.navigate()
class LogLevelSetting(BaseButton):
def __init__(self, driver):
super(LogLevelSetting, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@content-desc="log-level-settings-button"]/android.widget.TextView[2]')
class BackupRecoveryPhraseButton(BaseButton):
def __init__(self, driver):
super(BackupRecoveryPhraseButton, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@content-desc="back-up-recovery-phrase-button"]')
def click(self):
self.scroll_to_element().click()
self.driver.info('Tap on %s' % self.name)
return self.navigate()
class OkContinueButton(BaseButton):
def __init__(self, driver):
super(OkContinueButton, self).__init__(driver)
self.locator = self.Locator.xpath_selector("//*[@text='Okay, continue']")
class RecoveryPhraseTable(BaseText):
def __init__(self, driver):
super(RecoveryPhraseTable, self).__init__(driver)
self.locator = self.Locator.xpath_selector(
"//*[@text='Your seed phrase']/following-sibling::android.view.ViewGroup[1]/android.widget.TextView")
class RecoveryPhraseWordNumberText(BaseText):
def __init__(self, driver):
super(RecoveryPhraseWordNumberText, self).__init__(driver)
self.locator = self.Locator.text_part_selector('#')
@property
def number(self):
time.sleep(1)
return int(self.find_element().text.split('#')[1])
class RecoveryPhraseWordInput(BaseEditBox):
def __init__(self, driver):
super(RecoveryPhraseWordInput, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//android.widget.EditText')
class DebugModeToggle(BaseButton):
def __init__(self, driver):
super(DebugModeToggle, self).__init__(driver)
self.locator = self.Locator.xpath_selector("//android.widget.Switch")
def click(self):
self.scroll_to_element()
super(DebugModeToggle, self).click()
class SelectFromGalleryButton(BaseButton):
def __init__(self, driver):
super(SelectFromGalleryButton, self).__init__(driver)
self.locator = self.Locator.text_selector('Select from gallery')
class CaptureButton(BaseButton):
def __init__(self, driver):
super(CaptureButton, self).__init__(driver)
self.locator = self.Locator.text_selector('Capture')
class MainCurrencyButton(BaseButton):
def __init__(self, driver):
super(MainCurrencyButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id("currency-button")
class PlusButton(BaseButton):
def __init__(self, driver):
super(PlusButton, 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')]")
class SpecifyNameInput(BaseEditBox):
def __init__(self, driver):
super(SpecifyNameInput, 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 HelpButton(BaseButton):
def __init__(self, driver):
super(HelpButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id("help-button")
def click(self):
self.scroll_to_element().click()
class SubmitBugButton(BaseButton):
def __init__(self, driver):
super(SubmitBugButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id("submit-bug-button")
class RequestFeatureButton(BaseButton):
def __init__(self, driver):
super(RequestFeatureButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id("request-a-feature-button")
class FaqButton(BaseButton):
def __init__(self, driver):
super(FaqButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id("faq-button")
def navigate(self):
from views.web_views.base_web_view import BaseWebView
return BaseWebView(self.driver)
class AppVersionText(BaseText):
def __init__(self, driver):
super(AppVersionText, self).__init__(driver)
self.locator = self.Locator.xpath_selector("//*[@content-desc='app-version']//android.widget.TextView[2]")
class NodeVersionText(BaseText):
def __init__(self, driver):
super(NodeVersionText, self).__init__(driver)
self.locator = self.Locator.xpath_selector("//*[@content-desc='node-version']//android.widget.TextView[2]")
class BootnodesButton(BaseButton):
def __init__(self, driver):
super(BootnodesButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('bootnodes-settings-button')
class AddBootnodeButton(BaseButton):
def __init__(self, driver):
super(AddBootnodeButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id("add-bootnode")
class BootnodeAddressInput(BaseEditBox):
def __init__(self, driver):
super(BootnodeAddressInput, self).__init__(driver)
self.locator = self.Locator.accessibility_id("bootnode-address")
class EnableBootnodesToggle(BaseEditBox):
def __init__(self, driver):
super(EnableBootnodesToggle, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//android.widget.Switch')
class MailServerButton(BaseButton):
def __init__(self, driver):
super(MailServerButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('offline-messages-settings-button')
class MailServerAddressInput(BaseEditBox):
def __init__(self, driver):
super(MailServerAddressInput, self).__init__(driver)
self.locator = self.Locator.xpath_selector(
"//*[@text='Mailserver address']/following-sibling::*[1]/android.widget.EditText")
class MailServerAutoSelectionButton(BaseButton):
def __init__(self, driver):
super(MailServerAutoSelectionButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id("checkbox")
class MailServerElement(BaseButton):
def __init__(self, driver, server_name):
super(MailServerElement, self).__init__(driver)
self.server_name = server_name
self.locator = self.Locator.xpath_selector("//*[@content-desc='mailserver-item']//*[@text='%s']" % server_name)
def click(self):
self.scroll_to_element().click()
self.driver.info('Tap on "%s" mailserver value' % self.server_name)
class MailServerConnectButton(BaseButton):
def __init__(self, driver):
super(MailServerConnectButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('mailserver-connect-button')
class MailServerDeleteButton(BaseButton):
def __init__(self, driver):
super(MailServerDeleteButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('mailserver-delete-button')
class MailServerConfirmDeleteButton(BaseButton):
def __init__(self, driver):
super(MailServerConfirmDeleteButton, self).__init__(driver)
self.locator = self.Locator.text_selector('DELETE MAILSERVER')
class ActiveNetworkName(BaseText):
def __init__(self, driver):
super(ActiveNetworkName, self).__init__(driver)
self.locator = self.Locator.text_part_selector('with upstream RPC')
class AboutButton(BaseButton):
def __init__(self, driver):
super(AboutButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('about-button')
def navigate(self):
from views.about_view import AboutView
return AboutView(self.driver)
def click(self):
self.scroll_to_element().click()
return self.navigate()
class RemovePictureButton(BaseButton):
def __init__(self, driver):
super().__init__(driver)
self.locator = self.Locator.text_selector('Remove current photo')
class DevicesButton(BaseButton):
def __init__(self, driver):
super().__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@content-desc="pairing-settings-button"]')
class DeviceNameInput(BaseEditBox):
def __init__(self, driver):
super().__init__(driver)
self.locator = self.Locator.accessibility_id('device-name')
class ContinueButton(BaseButton):
def __init__(self, driver):
super(ContinueButton, self).__init__(driver)
self.locator = self.Locator.text_selector('Continue')
class SyncSettingsButton(BaseButton):
def __init__(self, driver):
super(SyncSettingsButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('sync-settings-button')
def click(self):
self.scroll_to_element().click()
self.driver.info('Tap on %s' % self.name)
class GoToPairingSettingsButton(BaseButton):
def __init__(self, driver):
super(GoToPairingSettingsButton, self).__init__(driver)
self.locator = self.Locator.text_selector('GO TO PAIRING SETTINGS')
class AdvertiseDeviceButton(BaseButton):
def __init__(self, driver):
super(AdvertiseDeviceButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('advertise-device')
class SyncedDeviceToggle(BaseButton):
def __init__(self, driver, device_name):
super(SyncedDeviceToggle, self).__init__(driver)
self.device_name = device_name
self.locator = self.Locator.xpath_selector(
'//android.widget.TextView[contains(@text,"%s")]/../android.widget.Switch' % device_name)
class SyncAllButton(BaseButton):
def __init__(self, driver):
super(SyncAllButton, self).__init__(driver)
self.locator = self.Locator.text_selector('Sync all devices')
class ContactsButton(BaseButton):
def __init__(self, driver):
super(ContactsButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('contacts-button')
class BlockedUsersButton(BaseButton):
def __init__(self, driver):
super(BlockedUsersButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('blocked-users-list-button')
class DappPermissionsButton(BaseButton):
def __init__(self, driver):
super(DappPermissionsButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('dapps-permissions-button')
def click(self):
self.scroll_to_element().click()
self.driver.info('Tap on %s' % self.name)
class RevokeAccessButton(BaseButton):
def __init__(self, driver):
super(RevokeAccessButton, self).__init__(driver)
self.locator = self.Locator.text_selector('Revoke access')
class PrivacyAndSecurityButton(BaseButton):
def __init__(self, driver):
super(PrivacyAndSecurityButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('privacy-and-security-settings-button')
class UseMobileDataToggle(BaseButton):
def __init__(self, driver):
super(UseMobileDataToggle, self).__init__(driver)
self.locator = self.Locator.xpath_selector(
"//*[@text='Use mobile data']/following-sibling::android.widget.Switch[1]")
class AskMeWhenOnMobileNetworkToggle(BaseButton):
def __init__(self, driver):
super(AskMeWhenOnMobileNetworkToggle, self).__init__(driver)
self.locator = self.Locator.xpath_selector(
"//*[@text='Ask me when on mobile network']/following-sibling::android.widget.Switch[1]")
class ENSUsernameInChatSettings(BaseElement):
def __init__(self, driver):
super(ENSUsernameInChatSettings, self).__init__(driver)
self.locator = self.Locator.xpath_selector(
"//*[@content-desc='chat-icon']/../android.widget.TextView[2]")
class ProfileView(BaseView):
def __init__(self, driver):
super(ProfileView, self).__init__(driver)
self.driver = driver
self.options_button = OptionsButton(self.driver)
self.username_input = OptionsButton.UsernameInput(self.driver)
self.user_status_box = OptionsButton.UserStatusBox(self.driver)
self.user_status_input = OptionsButton.UserStatusInput(self.driver)
self.public_key_text = PublicKeyText(self.driver)
self.profile_address_text = ProfileAddressText(self.driver)
self.about_button = AboutButton(self.driver)
self.app_version_text = AppVersionText(self.driver)
self.node_version_text = NodeVersionText(self.driver)
self.network_settings_button = NetworkSettingsButton(self.driver)
self.active_network_name = ActiveNetworkName(self.driver)
self.plus_button = PlusButton(self.driver)
self.ropsten_chain_button = RopstenChainButton(self.driver)
self.custom_network_url = CustomNetworkURL(self.driver)
self.specify_name_input = SpecifyNameInput(self.driver)
self.connect_button = NetworkSettingsButton.ConnectButton(self.driver)
self.logout_button = LogoutButton(self.driver)
self.logout_dialog = LogoutDialog(self.driver)
self.confirm_logout_button = ConfirmLogoutButton(self.driver)
self.main_currency_button = MainCurrencyButton(self.driver)
self.default_username_text = DefaultUserNameText(self.driver)
self.share_my_profile_button = ShareMyProfileButton(self.driver)
self.profile_picture = ProfilePictureElement(self.driver)
self.edit_picture_button = EditPictureButton(self.driver)
self.remove_picture_button = RemovePictureButton(self.driver)
self.confirm_edit_button = ConfirmEditButton(self.driver)
self.cross_icon = CrossIcon(self.driver)
self.advanced_button = AdvancedButton(self.driver)
self.log_level_setting = LogLevelSetting(self.driver)
self.debug_mode_toggle = DebugModeToggle(self.driver)
self.contacts_button = ContactsButton(self.driver)
self.blocked_users_button = BlockedUsersButton(self.driver)
self.dapp_permissions_button = DappPermissionsButton(self.driver)
self.revoke_access_button = RevokeAccessButton(self.driver)
self.privacy_and_security_button = PrivacyAndSecurityButton(self.driver)
# Backup recovery phrase
self.backup_recovery_phrase_button = BackupRecoveryPhraseButton(self.driver)
self.ok_continue_button = OkContinueButton(self.driver)
self.recovery_phrase_table = RecoveryPhraseTable(self.driver)
self.recovery_phrase_word_number = RecoveryPhraseWordNumberText(self.driver)
self.recovery_phrase_word_input = RecoveryPhraseWordInput(self.driver)
self.select_from_gallery_button = SelectFromGalleryButton(self.driver)
self.capture_button = CaptureButton(self.driver)
self.help_button = HelpButton(self.driver)
self.submit_bug_button = SubmitBugButton(self.driver)
self.request_a_feature_button = RequestFeatureButton(self.driver)
self.faq_button = FaqButton(self.driver)
self.about_button = AboutButton(self.driver)
self.sync_settings_button = SyncSettingsButton(self.driver)
# Bootnodes
self.bootnodes_button = BootnodesButton(self.driver)
self.bootnode_address_input = BootnodeAddressInput(self.driver)
self.enable_bootnodes = EnableBootnodesToggle(self.driver)
self.add_bootnode_button = AddBootnodeButton(self.driver)
# Mailservers
self.mail_server_button = MailServerButton(self.driver)
self.mail_server_address_input = MailServerAddressInput(self.driver)
self.mail_server_connect_button = MailServerConnectButton(self.driver)
self.mail_server_auto_selection_button = MailServerAutoSelectionButton(self.driver)
self.mail_server_delete_button = MailServerDeleteButton(self.driver)
self.mail_server_confirm_delete_button = MailServerConfirmDeleteButton(self.driver)
# Pairing
self.devices_button = DevicesButton(self.driver)
self.device_name_input = DeviceNameInput(self.driver)
self.continue_button = ContinueButton(self.driver)
self.go_to_pairing_settings_button = GoToPairingSettingsButton(self.driver)
self.advertise_device_button = AdvertiseDeviceButton(self.driver)
self.sync_all_button = SyncAllButton(self.driver)
# ENS
self.username_in_ens_chat_settings_text = ENSUsernameInChatSettings(self.driver)
self.ens_usernames_button = ENSusernames(self.driver)
self.ens_name_in_share_chat_key_text = ENSUsernameInShareChatKeyPopup(self.driver)
# Mobile Data
self.use_mobile_data = UseMobileDataToggle(self.driver)
self.ask_me_when_on_mobile_network = AskMeWhenOnMobileNetworkToggle(self.driver)
def switch_network(self, network='Mainnet with upstream RPC'):
self.advanced_button.click()
self.network_settings_button.click()
network_button = NetworkSettingsButton.NetworkButton(self.driver, network)
network_button.click()
self.connect_button.click()
self.confirm_button.click()
from views.sign_in_view import SignInView
signin_view = SignInView(self.driver)
signin_view.sign_in()
def open_contact_from_profile(self, username):
self.contacts_button.click()
self.element_by_text(username).click()
from views.chat_view import ChatView
return ChatView(self.driver)
def switch_development_mode(self):
self.advanced_button.click()
self.debug_mode_toggle.click()
def add_custom_network(self):
self.advanced_button.click()
self.network_settings_button.scroll_to_element()
self.network_settings_button.click()
self.plus_button.click_until_presence_of_element(self.ropsten_chain_button)
self.custom_network_url.send_keys('https://ropsten.infura.io/v3/f315575765b14720b32382a61a89341a')
self.specify_name_input.send_keys('custom_ropsten')
self.ropsten_chain_button.scroll_to_element()
self.ropsten_chain_button.click()
self.ropsten_chain_button.click()
self.save_button.click()
self.element_by_text_part('custom_ropsten').click_until_presence_of_element(self.connect_button)
self.connect_button.click()
self.confirm_button.click()
return self.get_sign_in_view()
def get_recovery_phrase(self):
text = [i.text for i in self.recovery_phrase_table.find_elements()]
return dict(zip(map(int, text[::2]), text[1::2]))
def backup_recovery_phrase(self):
self.ok_continue_button.click()
recovery_phrase = self.get_recovery_phrase()
self.next_button.click()
word_number = self.recovery_phrase_word_number.number
self.recovery_phrase_word_input.set_value(recovery_phrase[word_number])
self.next_button.click()
word_number_1 = self.recovery_phrase_word_number.number
self.recovery_phrase_word_input.set_value(recovery_phrase[word_number_1])
self.done_button.click()
self.yes_button.click()
self.ok_got_it_button.click()
return recovery_phrase
def edit_profile_picture(self, file_name: str):
if not AbstractTestCase().environment == 'sauce':
raise NotImplementedError('Test case is implemented to run on SauceLabs only')
self.profile_picture.click()
self.profile_picture.template = file_name
self.select_from_gallery_button.click()
if self.allow_button.is_element_displayed(sec=5):
self.allow_button.click()
picture = self.element_by_text(file_name)
if not picture.is_element_displayed(2):
self.show_roots_button.click()
for element_text in 'Images', 'DCIM':
self.element_by_text(element_text).click()
picture.click()
def remove_profile_picture(self):
if not AbstractTestCase().environment == 'sauce':
raise NotImplementedError('Test case is implemented to run on SauceLabs only')
self.profile_picture.click()
self.remove_picture_button.click()
def logout(self):
self.logout_button.click()
return self.logout_dialog.logout_button.click()
def mail_server_by_name(self, server_name):
return MailServerElement(self.driver, server_name)
def get_toggle_device_by_name(self, device_name):
return SyncedDeviceToggle(self.driver, device_name)
def discover_and_advertise_device(self, device_name):
self.profile_button.click()
self.sync_settings_button.click()
self.devices_button.scroll_to_element()
self.devices_button.click()
self.device_name_input.set_value(device_name)
self.continue_button.click_until_presence_of_element(self.advertise_device_button, 2)
self.advertise_device_button.click()
def retry_to_connect_to_mailserver(self):
i = 0
while self.element_by_text_part("Error connecting").is_element_present(20) and i < 5:
self.element_by_text('RETRY').click()
i += 1
self.just_fyi("retrying to connect: %s attempt" % i)
# TODO: uncomment after https://github.com/status-im/status-react/issues/9269
time.sleep(10)
if i == 5:
self.driver.fail("Failed to connect after %s attempts" % i)
def connect_existing_status_ens(self, name):
self.just_fyi('switching to mainnet and add ENS')
profile = self.profile_button.click()
profile.switch_network('Mainnet with upstream RPC')
self.profile_button.click()
dapp_view = self.ens_usernames_button.click()
dapp_view.element_by_text('Get started').click()
dapp_view.ens_name.set_value(name)
dapp_view.check_ens_name.click_until_presence_of_element(self.element_by_text('Ok, got it'))
dapp_view.element_by_text('Ok, got it').click()
return dapp_view
def return_mailserver_name(self, mailserver_name, fleet):
return mailserver_name + '.' + fleet
@property
def current_active_network(self):
self.advanced_button.click()
self.active_network_name.scroll_to_element(10, 'up')
return self.active_network_name.text