From 25c24bf716d6428d4259bbd8744c6056a9136af1 Mon Sep 17 00:00:00 2001 From: Serhy Date: Tue, 2 Apr 2019 18:16:08 +0300 Subject: [PATCH] Test opening app from deep links Signed-off-by: Serhy --- .../dapps_and_browsing/test_deep_links.py | 69 ++++++++++++++++--- test/appium/views/base_view.py | 24 +++++++ test/appium/views/sign_in_view.py | 4 ++ 3 files changed, 89 insertions(+), 8 deletions(-) diff --git a/test/appium/tests/atomic/dapps_and_browsing/test_deep_links.py b/test/appium/tests/atomic/dapps_and_browsing/test_deep_links.py index 6ce5769437..12f2703296 100644 --- a/test/appium/tests/atomic/dapps_and_browsing/test_deep_links.py +++ b/test/appium/tests/atomic/dapps_and_browsing/test_deep_links.py @@ -1,10 +1,10 @@ import pytest from selenium.common.exceptions import NoSuchElementException -from support.device_apps import start_web_browser from tests import marks from tests.base_test_case import SingleDeviceTestCase from views.sign_in_view import SignInView +from tests.users import basic_user class TestDeepLinks(SingleDeviceTestCase): @@ -15,16 +15,69 @@ class TestDeepLinks(SingleDeviceTestCase): sign_in_view = SignInView(self.driver) sign_in_view.create_user() self.driver.close_app() - start_web_browser(self.driver) chat_name = sign_in_view.get_public_chat_name() - sign_in_view.send_as_keyevent('https://get.status.im/chat/public/%s' % chat_name) - sign_in_view.confirm() - open_button = sign_in_view.element_by_xpath('//*[@text="Open in Status"] | //*[@content-desc="Open in Status"]') - open_button.wait_for_visibility_of_element() - open_button.click() - sign_in_view.sign_in() + deep_link = 'https://get.status.im/chat/public/%s' % chat_name + sign_in_view.open_weblink_and_login(deep_link) chat_view = sign_in_view.get_chat_view() try: assert chat_view.user_name_text.text == '#' + chat_name except (AssertionError, NoSuchElementException): pytest.fail("Public chat '%s' is not opened" % chat_name) + + @marks.testrail_id(5441) + @marks.medium + def test_open_user_profile_using_deep_link(self): + sign_in_view = SignInView(self.driver) + sign_in_view.create_user() + self.driver.close_app() + deep_link = 'https://get.status.im/user/%s' % basic_user['public_key'] + sign_in_view.open_weblink_and_login(deep_link) + chat_view = sign_in_view.get_chat_view() + for text in basic_user['username'], 'Add to contacts', 'Send transaction': + if not chat_view.element_by_text(text).scroll_to_element(): + pytest.fail("User profile screen is not opened") + + + @marks.testrail_id(5442) + @marks.medium + def test_open_dapp_using_deep_link(self): + sign_in_view = SignInView(self.driver) + sign_in_view.create_user() + self.driver.close_app() + dapp_name = 'simpledapp.eth' + dapp_deep_link = 'https://get.status.im/browse/%s' % dapp_name + sign_in_view.open_weblink_and_login(dapp_deep_link) + web_view = sign_in_view.get_chat_view() + try: + test_dapp_view = web_view.open_in_status_button.click() + test_dapp_view.allow_button.is_element_present() + except NoSuchElementException: + pytest.fail("DApp '%s' is not opened!" % dapp_name) + + @marks.testrail_id(5780) + @marks.medium + def test_open_own_user_profile_using_deep_link(self): + sign_in_view = SignInView(self.driver) + sign_in_view.recover_access(passphrase=basic_user['passphrase']) + self.driver.close_app() + deep_link = 'https://get.status.im/user/%s' % basic_user['public_key'] + sign_in_view.open_weblink_and_login(deep_link) + chat_view = sign_in_view.get_chat_view() + for text in basic_user['username'], 'Share my profile', 'Contacts': + if not chat_view.element_by_text(text).scroll_to_element(): + pytest.fail("Own profile screen is not opened!") + + @marks.testrail_id(5781) + @marks.medium + def test_deep_link_with_invalid_user_public_key(self): + sign_in_view = SignInView(self.driver) + sign_in_view.create_user() + self.driver.close_app() + deep_link = 'https://get.status.im/user/%s' % basic_user['public_key'][:-10] + sign_in_view.open_weblink_and_login(deep_link) + chat_view = sign_in_view.get_home_view() + start_new_chat_view = chat_view.plus_button.click() + try: + assert start_new_chat_view.start_new_chat_button.is_element_present() + except (AssertionError, NoSuchElementException): + pytest.fail("Can't navigate to start new chat after app opened from deep link with invalid public key") diff --git a/test/appium/views/base_view.py b/test/appium/views/base_view.py index 17b4feeffb..3fb9688bcd 100644 --- a/test/appium/views/base_view.py +++ b/test/appium/views/base_view.py @@ -12,6 +12,7 @@ from PIL import Image from datetime import datetime from io import BytesIO from views.base_element import BaseButton, BaseElement, BaseEditBox, BaseText +from support.device_apps import start_web_browser class BackButton(BaseButton): @@ -282,6 +283,20 @@ class AssetButton(BaseButton): self.driver.info('Tap on %s' % self.name) +class OpenInStatusButton(BaseButton): + def __init__(self, driver): + super(OpenInStatusButton, self).__init__(driver) + self.locator = self.Locator.xpath_selector('//*[@text="Open in Status"]') + + def click(self): + self.wait_for_visibility_of_element() + + # 'Open in Status' button already in DOM but need to scroll down so that click action works + self.driver.swipe(500, 1000, 500, 100) + self.driver.info('Tap on %s' % self.name) + self.wait_for_element().click() + + class BaseView(object): def __init__(self, driver): self.driver = driver @@ -311,6 +326,9 @@ class BaseView(object): self.show_roots_button = ShowRoots(self.driver) self.get_started_button = GetStartedButton(self.driver) + # external browser + self.open_in_status_button = OpenInStatusButton(self.driver) + self.apps_button = AppsButton(self.driver) self.status_app_icon = StatusAppIcon(self.driver) @@ -566,3 +584,9 @@ class BaseView(object): airplane_toggle.click() # opening Status app self.driver.start_activity(app_package='im.status.ethereum', app_activity='.MainActivity') + + def open_universal_web_link(self, deep_link): + start_web_browser(self.driver) + self.send_as_keyevent(deep_link) + self.confirm() + self.open_in_status_button.click() diff --git a/test/appium/views/sign_in_view.py b/test/appium/views/sign_in_view.py index 1a13840180..7dc308acc2 100644 --- a/test/appium/views/sign_in_view.py +++ b/test/appium/views/sign_in_view.py @@ -154,3 +154,7 @@ class SignInView(BaseView): except IndexError: raise NoSuchElementException( 'Device %s: Unable to find account by position %s' % (self.driver.number, position)) from None + + def open_weblink_and_login(self, url_weblink): + self.open_universal_web_link(url_weblink) + self.sign_in()