status-react/test/appium/views/profile_view.py
Gheorghe Pinzaru 050f20cfae
Add local notifications for transactions
Pods

Add headless js service

Handle Local Notifications react

CopyPaste driven implementation of java notification

pn demo

Show iOs push in foreground

Show icon in notification

Enable notifications on login

Get chain from status-go

Add UI for switching notifications

go go!

Fixup

Handle notification onPress

Android UI

Handle press iOs

Handle android press and validate

go update

Fix route params in universal link handler

Set show badge explicitly to false

Fix e2e

bump status go

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-10-29 15:40:58 +03:00

853 lines
31 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 AddNewContactButton(BaseButton):
def __init__(self, driver):
super(AddNewContactButton, self).__init__(driver)
self.locator = self.Locator.text_selector('Add contact')
def navigate(self):
from views.contacts_view import ContactsView
return ContactsView(self.driver)
class InviteFriendsInContactsButton(BaseButton):
def __init__(self, driver):
super(InviteFriendsInContactsButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('invite-friends-button')
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.xpath_selector("//*[@text='Automatic selection']/following-sibling::*[1]")
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):
size = self.driver.get_window_size()
self.driver.swipe(500, size["height"]*0.8, 500, size["height"]*0.05)
self.driver.info('Tap on "%s" mailserver value' % self.server_name)
self.find_element().click()
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 PrifileNotificationsButton(BaseButton):
def __init__(self, driver):
super().__init__(driver)
self.locator = self.Locator.accessibility_id("notifications-settings-button")
class PrifileNotificationsToggleButton(BaseButton):
def __init__(self, driver):
super().__init__(driver)
self.locator = self.Locator.xpath_selector("//*[@content-desc='notifications-settings-button']")
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-item-button')
class SettingsButton(BaseButton):
def __init__(self, driver):
super(SettingsButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('Settings-item-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 DeleteMyProfileButton(BaseButton):
def __init__(self, driver):
super(DeleteMyProfileButton, self).__init__(driver)
self.locator = self.Locator.text_selector('Delete my profile')
class DeleteMyProfilePasswordInput(BaseEditBox):
def __init__(self, driver):
super(DeleteMyProfilePasswordInput, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//android.widget.EditText')
class DeleteProfileButton(BaseButton):
def __init__(self, driver):
super(DeleteProfileButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('delete-profile-confirm')
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 PushNotificationToggle(BaseButton):
def __init__(self, driver):
super(PushNotificationToggle, self).__init__(driver)
self.locator = self.Locator.xpath_selector(
"//*[@content-desc='notifications-button']//*[@content-desc='switch']")
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.profile_notifications_button = PrifileNotificationsButton(self.driver)
self.profile_notifications_toggle_button = PrifileNotificationsToggleButton(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.add_new_contact_button = AddNewContactButton(self.driver)
self.invite_friends_in_contact_button = InviteFriendsInContactsButton(self.driver)
self.dapp_permissions_button = DappPermissionsButton(self.driver)
self.revoke_access_button = RevokeAccessButton(self.driver)
self.privacy_and_security_button = PrivacyAndSecurityButton(self.driver)
self.delete_my_profile_button = DeleteMyProfileButton(self.driver)
self.delete_my_profile_password_input = DeleteMyProfilePasswordInput(self.driver)
self.delete_profile_button = DeleteProfileButton(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)
self.settings_button = SettingsButton(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)
#Push notifications
self.push_notification_toggle = PushNotificationToggle(self.driver)
def switch_network(self, network='Mainnet with upstream RPC'):
self.settings_button.click()
self.advanced_button.click()
self.network_settings_button.click()
network_button = NetworkSettingsButton.NetworkButton(self.driver, network)
network_button.click()
self.connect_button.click_until_presence_of_element(self.confirm_button)
from views.sign_in_view import SignInView
signin_view = SignInView(self.driver)
self.confirm_button.click_until_absense_of_element(self.confirm_button)
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.settings_button.click()
self.logout_button.click()
self.logout_dialog.logout_button.click()
self.logout_button.wait_for_invisibility_of_element(30)
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.settings_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()
self.settings_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