summaryrefslogtreecommitdiff
path: root/tests/testcases
diff options
context:
space:
mode:
Diffstat (limited to 'tests/testcases')
-rw-r--r--tests/testcases/common.py26
-rwxr-xr-xtests/testcases/copy_binary.sh4
-rw-r--r--tests/testcases/montage.py9
-rw-r--r--tests/testcases/test.py86
4 files changed, 99 insertions, 26 deletions
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)