diff options
| author | = <=> | 2019-03-13 11:53:57 -0400 |
|---|---|---|
| committer | = <=> | 2019-03-13 11:53:57 -0400 |
| commit | a9440d6cf3563c1ec5568f6d952b764cf1b4a906 (patch) | |
| tree | a59eb541cde9b00607ccd6db34ff25591efa9956 /tests | |
| parent | 8664c6d5f93d727f05e001d2e515df25314624a6 (diff) | |
#719 iOS support (buggy)
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/README.TXT | 12 | ||||
| -rw-r--r-- | tests/testcases/common.py | 26 | ||||
| -rwxr-xr-x | tests/testcases/copy_binary.sh | 4 | ||||
| -rw-r--r-- | tests/testcases/montage.py | 9 | ||||
| -rw-r--r-- | tests/testcases/test.py | 86 |
5 files changed, 111 insertions, 26 deletions
diff --git a/tests/README.TXT b/tests/README.TXT index 70cfeeba..0c52abb1 100644 --- a/tests/README.TXT +++ b/tests/README.TXT @@ -1,9 +1,21 @@ Appium install: http://appium.io/docs/en/about-appium/getting-started/ Python Appium client install: https://github.com/appium/python-client + +Android +--------- I currently test on an Android 7.1.1 emulator. Change test.py config as needed ./startappium.sh +iOS +---- +For iOS: Also needs `brew install carthage` (?) +Read/follow: http://appium.io/docs/en/drivers/ios-xcuitest/index.html +https://github.com/appium/appium-xcuitest-driver + +brew tap wix/brew && brew install wix/brew/applesimutils +Just run appium (not start-appium.sh) +export USE_PORT=8100 diff --git a/tests/testcases/common.py b/tests/testcases/common.py index 45f0d72a..94fca845 100644 --- a/tests/testcases/common.py +++ b/tests/testcases/common.py @@ -6,7 +6,10 @@ Common functions used by test cases from time import sleep, strftime import os from selenium.webdriver.common.touch_actions import TouchActions -from selenium.webdriver.common.action_chains import ActionChains +from appium.webdriver.common.touch_action import TouchAction + + + from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC @@ -14,6 +17,9 @@ from selenium.webdriver.support import expected_conditions as EC # global pointer to chrome driver driver = None +platform = None +native_context = None +web_context = None # keeps incrementing by 1 for screenshots saved image_counter = 1 @@ -71,7 +77,7 @@ def _goto_element(e): # waits for an element to load # allows you to also specify if you want a screenshot after it comes in -def _wait_for_id(id=id, dur=15, save_screenshot=False, save_screenshot_file=None): +def _wait_for_id(id=id, dur=30, save_screenshot=False, save_screenshot_file=None): log('Waiting for '+id+'...') WebDriverWait(driver, dur).until( EC.presence_of_element_located((By.ID, id))) @@ -166,12 +172,19 @@ def dbl_click_item(id=id, save_screenshot=False, save_screenshot_file=None, max_ _wait_for_id(id=id, save_screenshot=save_screenshot, save_screenshot_file=save_screenshot_file) element = driver.find_element_by_id(id) - actions = TouchActions(driver) - actions.double_tap(element) + if platform == 'android': + actions = TouchActions(driver) + actions.double_tap(element) retry_count = 1 while retry_count <= max_retry: try: - actions.perform() + if platform == 'ios': + # TBD fix to element + log ('hacky ios double tap') + driver.execute_script('mobile: doubleTap', {'x':100, 'y':100}); + + else: + actions.perform() except Exception as e: log('action error, try #{}...'.format(retry_count)) log ('Error reported was: '+str(e)) @@ -190,6 +203,7 @@ def input_item(id=id, txt="you forgot to specify text", save_screenshot=False, s _goto_element(element) element.clear() element.send_keys(txt) - driver.hide_keyboard() + driver.hide_keyboard(key_name='return') + #driver.hide_keyboard(key_name='Done') sleep(1) # sleep(wait) diff --git a/tests/testcases/copy_binary.sh b/tests/testcases/copy_binary.sh new file mode 100755 index 00000000..a02e8118 --- /dev/null +++ b/tests/testcases/copy_binary.sh @@ -0,0 +1,4 @@ +#!/bin/bash +rm -rf binary/* +cp ../../debug_files/app-debug.apk binary/zmNinja.apk +cp -R ~/Library/Developer/Xcode/DerivedData/zmNinja-dgoooijqwytvduflzaereulftmpl/Build/Products/Debug-iphonesimulator/zmNinja.app binary/ diff --git a/tests/testcases/montage.py b/tests/testcases/montage.py index 7c7fc8a5..7263e007 100644 --- a/tests/testcases/montage.py +++ b/tests/testcases/montage.py @@ -10,12 +10,21 @@ def run_tests(self): app.tap_menu_js() c.log ('Validating montage') c.click_item('testaut_menu_montage') + sleep(2) c.take_screenshot(None, 'montage-view-initial.png') c.click_item('img-0') sleep(4) c.take_screenshot(None,'montage-singleview.png') c.log ('Trying to save to gallery...') c.click_item('testaut_monitormodal_camera_button') + if c.platform == 'ios': + sleep(3) + try: + c.log ("iOS:Auto accepting alert...") + c.driver.execute('mobile:alert', { action: 'accept' }); + #c.driver.switchTo().alert().accept(); + except: + pass c.wait_for_loading_text(save_screenshot=True, save_screenshot_file='single-view-photo-save-results.png', text_options = ['done', 'Error - could not save']) sleep(1) c.dbl_click_item('singlemonitor') diff --git a/tests/testcases/test.py b/tests/testcases/test.py index b1707f59..6101dd51 100644 --- a/tests/testcases/test.py +++ b/tests/testcases/test.py @@ -11,6 +11,7 @@ from appium import webdriver import os import glob import errno +import argparse import common as c import wizard @@ -24,24 +25,55 @@ class ZmninjaAndroidTests(unittest.TestCase): 'Class to run tests against zmNinja' def setUp(self): - c.log ('Setting up....') - - desired_caps = { - 'platformName': 'Android', - 'automationName': 'UiAutomator2', - 'platformVersion': '7.1.1', - 'deviceName': 'Pixel', - 'nativeWebTap': True, - 'nativeWebScreenshot': True, # important, for screenshots - 'autoAcceptAlerts': True, - 'autoGrantPermissions': True, - 'appPackage': 'com.pliablepixels.zmninja_pro', - 'appActivity': 'com.pliablepixels.zmninja_pro.MainActivity' - } + c.log ('Setting up for platform: {}....'.format(c.platform)) + app_name = None + + if c.platform == 'android': + app_name = "zmNinja.apk" + desired_caps = { + 'platformName': 'Android', + 'automationName': 'UiAutomator2', + 'platformVersion': '7.1.1', + 'deviceName': 'Pixel', + 'nativeWebTap': True, + 'nativeWebScreenshot': True, # important, for screenshots + 'autoAcceptAlerts': True, + 'autoGrantPermissions': True, + 'appPackage': 'com.pliablepixels.zmninja_pro', + 'appActivity': 'com.pliablepixels.zmninja_pro.MainActivity' + } + + - desired_caps['app'] = os.path.abspath(os.path.join(os.path.dirname(__file__),'./zmNinja.apk')) + + else: + # iOS settings + app_name = "zmNinja.app" + desired_caps = { + 'platformName': 'iOS', + 'platformVersion': '12.1', + 'deviceName': 'iPhone SE', + 'nativeWebTap': False, + 'permissions': '{"com.pliablepixels.zmninja-pro": {"photos": "YES"}}', + + #'connectHardwareKeyboard': True, + #'nativeWebScreenshot': True, # important, for screenshots + 'autoAcceptAlerts': True, + 'autoGrantPermissions': True # doesn't work with XCUI + } + # desired_caps['permissions']['com.pliablepixels.zmninja-pro']['photos'] = 'YES' + + + + desired_caps['app'] = os.path.abspath(os.path.join(os.path.dirname(__file__),'./binary/'+app_name)) c.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) - c.driver.switch_to.context('WEBVIEW_com.pliablepixels.zmninja_pro') + contexts = c.driver.contexts + c.log ("All app contexts: {}".format(contexts)) + c.web_context = contexts[1] + c.native_context = contexts[0] + c.driver.switch_to.context(contexts[1]) + + #c.driver.switch_to.context('WEBVIEW_com.pliablepixels.zmninja_pro') def tearDown(self): @@ -102,7 +134,7 @@ class ZmninjaAndroidTests(unittest.TestCase): c.testConfig = config - run_dir = strftime('%b-%d-%I_%M_%S%p', localtime()) + run_dir = strftime(c.platform+'-%b-%d-%I_%M_%S%p', localtime()) c.testConfig['screenshot_dir'] = './screenshots/'+run_dir try: os.makedirs(c.testConfig['screenshot_dir']) @@ -127,6 +159,20 @@ class ZmninjaAndroidTests(unittest.TestCase): #---START OF SCRIPT -if __name__ == '__main__': - suite = unittest.TestLoader().loadTestsFromTestCase(ZmninjaAndroidTests) - unittest.TextTestRunner(verbosity=2).run(suite) + +platform = None +ap = argparse.ArgumentParser() +ap.add_argument('-i', '--ios', action='store_true') +ap.add_argument('-a', '--android', action='store_true') +args, u = ap.parse_known_args() +args = vars(args) + +if args['ios']: + c.platform = 'ios' +else: + c.platform = 'android' + + + +suite = unittest.TestLoader().loadTestsFromTestCase(ZmninjaAndroidTests) +unittest.TextTestRunner(verbosity=2).run(suite) |
