173 lines
5.4 KiB
Python
173 lines
5.4 KiB
Python
from types import SimpleNamespace
|
|
from appium.webdriver.common.appiumby import AppiumBy as By
|
|
|
|
from pageObjects.Toolbar import Toolbar
|
|
from helpers.UserHelper import get_displayname_for_user
|
|
from helpers.SetupClientHelper import substitute_inline_codes
|
|
from helpers.UserHelper import get_displayname_for_user
|
|
from helpers.AppHelper import app
|
|
from helpers.SyncHelper import wait_for
|
|
|
|
|
|
class AccountSetting:
|
|
ACCOUNT_CONNECTION_CONTAINER = SimpleNamespace(
|
|
by=By.NAME, selector="Synchronized folders"
|
|
)
|
|
MANAGE_ACCOUNT_BUTTON = SimpleNamespace(by=By.NAME, selector="Account")
|
|
ACCOUNT_MENU = SimpleNamespace(by=By.NAME, selector="{menu_item}")
|
|
CONFIRM_REMOVE_CONNECTION_BUTTON = SimpleNamespace(
|
|
by=By.NAME, selector="Remove connection"
|
|
)
|
|
ACCOUNT_CONNECTION_LABEL = SimpleNamespace(
|
|
by=By.XPATH,
|
|
selector="//list[@name='Synchronized folders']//label",
|
|
)
|
|
LOG_BROWSER_WINDOW = SimpleNamespace(by=None, selector=None)
|
|
ACCOUNT_LOADING = SimpleNamespace(by=None, selector=None)
|
|
DIALOG_STACK = SimpleNamespace(by=None, selector=None)
|
|
CONFIRMATION_YES_BUTTON = SimpleNamespace(by=None, selector=None)
|
|
|
|
@staticmethod
|
|
def account_action(action):
|
|
connections = app().find_elements(
|
|
AccountSetting.ACCOUNT_CONNECTION_CONTAINER.by,
|
|
AccountSetting.ACCOUNT_CONNECTION_CONTAINER.selector,
|
|
)
|
|
manage_button = None
|
|
for connection in connections:
|
|
# use the active connection
|
|
if connection.get_attribute("showing") == "true":
|
|
manage_button = connection.find_element(
|
|
AccountSetting.MANAGE_ACCOUNT_BUTTON.by,
|
|
AccountSetting.MANAGE_ACCOUNT_BUTTON.selector,
|
|
)
|
|
break
|
|
manage_button.click()
|
|
app().find_element(
|
|
AccountSetting.ACCOUNT_MENU.by,
|
|
AccountSetting.ACCOUNT_MENU.selector.format(menu_item=action),
|
|
).click()
|
|
|
|
@staticmethod
|
|
def remove_account_connection():
|
|
AccountSetting.account_action("Remove account")
|
|
app().find_element(
|
|
AccountSetting.CONFIRM_REMOVE_CONNECTION_BUTTON.by,
|
|
AccountSetting.CONFIRM_REMOVE_CONNECTION_BUTTON.selector,
|
|
).click()
|
|
|
|
@staticmethod
|
|
def logout():
|
|
AccountSetting.account_action("Log out")
|
|
|
|
@staticmethod
|
|
def login():
|
|
AccountSetting.account_action("Log in")
|
|
|
|
@staticmethod
|
|
def get_account_connection_label():
|
|
labels = app().find_elements(
|
|
AccountSetting.ACCOUNT_CONNECTION_LABEL.by,
|
|
AccountSetting.ACCOUNT_CONNECTION_LABEL.selector,
|
|
)
|
|
# first label is the sync status label
|
|
return labels[0].text
|
|
|
|
@staticmethod
|
|
def is_connecting():
|
|
return "Connecting to" in AccountSetting.get_account_connection_label()
|
|
|
|
@staticmethod
|
|
def is_user_signed_out():
|
|
return "Signed out" in AccountSetting.get_account_connection_label()
|
|
|
|
@staticmethod
|
|
def is_user_signed_in():
|
|
return "Connected" in AccountSetting.get_account_connection_label()
|
|
|
|
@staticmethod
|
|
def wait_until_connection_is_configured(timeout=5000):
|
|
result = squish.waitFor(
|
|
AccountSetting.is_connecting,
|
|
timeout,
|
|
)
|
|
|
|
if not result:
|
|
raise TimeoutError(
|
|
"Timeout waiting for connection to be configured for "
|
|
+ str(timeout)
|
|
+ " milliseconds"
|
|
)
|
|
|
|
@staticmethod
|
|
def wait_until_account_is_connected(timeout=5000):
|
|
result = wait_for(
|
|
AccountSetting.is_user_signed_in,
|
|
timeout,
|
|
)
|
|
|
|
if not result:
|
|
raise TimeoutError(
|
|
"Timeout waiting for the account to be connected for "
|
|
+ str(timeout)
|
|
+ " milliseconds"
|
|
)
|
|
return result
|
|
|
|
@staticmethod
|
|
def wait_until_sync_folder_is_configured(timeout=5000):
|
|
result = squish.waitFor(
|
|
lambda: not squish.waitForObjectExists(
|
|
AccountSetting.ACCOUNT_LOADING
|
|
).visible,
|
|
timeout,
|
|
)
|
|
|
|
if not result:
|
|
raise TimeoutError(
|
|
"Timeout waiting for sync folder to be connected for "
|
|
+ str(timeout)
|
|
+ " milliseconds"
|
|
)
|
|
return result
|
|
|
|
@staticmethod
|
|
def press_key(key):
|
|
key = key.replace('"', "")
|
|
key = f"<{key}>"
|
|
squish.nativeType(key)
|
|
|
|
@staticmethod
|
|
def is_log_dialog_visible():
|
|
visible = False
|
|
try:
|
|
visible = squish.waitForObjectExists(
|
|
AccountSetting.LOG_BROWSER_WINDOW
|
|
).visible
|
|
except:
|
|
pass
|
|
return visible
|
|
|
|
@staticmethod
|
|
def remove_connection_for_user(username):
|
|
Toolbar.open_account(username)
|
|
AccountSetting.remove_account_connection()
|
|
|
|
@staticmethod
|
|
def wait_until_account_is_removed(username, timeout=10000):
|
|
displayname = get_displayname_for_user(username)
|
|
displayname = substitute_inline_codes(displayname)
|
|
|
|
def account_removed():
|
|
account = Toolbar.get_account(username)
|
|
return account is None
|
|
|
|
result = wait_for(account_removed, timeout)
|
|
|
|
if not result:
|
|
raise TimeoutError(
|
|
"Timeout waiting for account to be removed for "
|
|
+ str(timeout)
|
|
+ " milliseconds"
|
|
)
|