diff --git a/.travis.yml b/.travis.yml
index cd630de..bd4cbad 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -23,22 +23,24 @@ matrix:
include:
- os: osx
env: TEST_SUITE=ios
- osx_image: xcode8.3
+ osx_image: xcode9
language: generic
before_install:
- brew update
- - brew install nvm
- - source $(brew --prefix nvm)/nvm.sh
+ - brew install carthage > /dev/null 2>&1
+ - brew install ios-webkit-debug-proxy > /dev/null 2>&1
+ - brew install nvm > /dev/null 2>&1
- brew install python3
- pip install virtualenv
- virtualenv env -p python3
- source env/bin/activate
- - brew install ios-webkit-debug-proxy
install:
- echo Hello Macaca!
+ - source $(brew --prefix nvm)/nvm.sh
- nvm install 7
- nvm use 7
- - npm install -g macaca-cli macaca-ios
+ - npm i ios-simulator macaca-cli macaca-ios -g
+ - open -a Simulator --args -CurrentDeviceUDID `ios-simulator -n 'iPhone 6s'` > /dev/null 2>&1
- pip install -r requirements.txt
script:
- macaca server --verbose &
@@ -46,14 +48,16 @@ matrix:
- python tests/macaca-ios-sample.test.py
- os: linux
env: TEST_SUITE=android
- jdk: openjdk7
+ jdk: oraclejdk8
language: android
android:
components:
- - build-tools-23.0.2
- - android-23
+ - tools
+ - build-tools-25.0.2
+ - platform-tools
- extra-android-m2repository
- - extra-android-support
+ - extra-google-android-support
+ - android-25
sudo: required
addons:
apt:
@@ -63,13 +67,17 @@ matrix:
- python3.5
before_install:
- export CHROME_BIN=chromium-browser
- - export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
+ - wget http://services.gradle.org/distributions/gradle-3.3-all.zip
+ - unzip gradle-3.3-all.zip > /dev/null
+ - export GRADLE_HOME=$PWD/gradle-3.3
+ - export PATH=$GRADLE_HOME/bin:$PATH
+ - export JAVA_HOME=/usr/lib/jvm/java-8-oracle
- export ANDROID_HOME=/usr/local/android-sdk
- - echo yes | android update sdk --all --filter build-tools-23.0.2 --no-ui --force
+ - . $HOME/.nvm/nvm.sh
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
before_script:
- - echo no | android create avd --force -n test -t android-19 --abi armeabi-v7a
+ - echo no | android create avd --force -n test -t android-21 --abi armeabi-v7a
- emulator -avd test -no-audio -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
@@ -91,7 +99,7 @@ matrix:
- TEST_SUITE=pc-browser
language: python
sudo: false
- python: "3.5"
+ python: 3.5
addons:
apt:
packages:
diff --git a/README.md b/README.md
index ef51079..fdf86c6 100644
--- a/README.md
+++ b/README.md
@@ -9,18 +9,32 @@
## Install
-```shell
-$ npm install -g macaca-cli macaca-electron
+``` bash
+$ npm install -g macaca-cli macaca-electron macaca-ios macaca-android
$ pip install -r requirements.txt
```
## Run test
-```shell
-$ macaca server
+``` bash
+$ macaca server --verbose
$ python tests/macaca-desktop-sample.test.py
+$ python tests/macaca-ios-sample.test.py
+$ python tests/macaca-android-sample.test.py
```
+
+
+## Contributors
+
+|[
ziczhu](https://github.com/ziczhu)
|[
xudafeng](https://github.com/xudafeng)
+| :---: | :---: |
+
+
+This project follows the git-contributor [spec](https://github.com/xudafeng/git-contributor), auto upated at `Tue Apr 17 2018 00:49:24 GMT+0800`.
+
+
+
## License
The MIT License (MIT)
diff --git a/tests/macaca-android-sample.test.py b/tests/macaca-android-sample.test.py
index 30ae211..0beec22 100644
--- a/tests/macaca-android-sample.test.py
+++ b/tests/macaca-android-sample.test.py
@@ -4,12 +4,13 @@
import os
import time
from macaca import WebDriver
+from macaca import Keys
+from retrying import retry
desired_caps = {
'platformName': 'android',
'app': 'https://npmcdn.com/android-app-bootstrap@latest/android_app_bootstrap/build/outputs/apk/android_app_bootstrap-debug.apk',
- 'reuse': 3
-}
+ }
server_url = {
'hostname': 'localhost',
@@ -30,21 +31,29 @@ class MacacaTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = WebDriver(desired_caps, server_url)
- cls.driver.init()
+ cls.initDriver()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
+ @classmethod
+ @retry
+ def initDriver(cls):
+ print("Retry connecting server...")
+ cls.driver.init()
+
def test_01_login(self):
- self.driver \
- .element_by_xpath('//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.EditText[1]') \
+ el = self.driver \
+ .elements_by_class_name('android.widget.EditText')[0] \
.send_keys('中文+Test+12345678') \
- els = self.driver \
- .elements_by_class_name('android.widget.EditText')
+ el = self.driver \
+ .elements_by_class_name('android.widget.EditText')[1] \
+ .send_keys('111111')
- els[1].send_keys('111111')
+ time.sleep(1)
+ # self.driver.keys(Keys.ENTER.value + Keys.ESCAPE.value)
self.driver \
.element_by_name('Login') \
@@ -52,57 +61,46 @@ def test_01_login(self):
def test_02_scroll_tableview(self):
self.driver \
- .element_by_name('HOME') \
+ .wait_for_element_by_name('HOME') \
.click()
self.driver \
- .element_by_name('list') \
+ .wait_for_element_by_name('list') \
.click()
def test_03_gesture(self):
- self.driver \
- .touch('drag', {
- 'fromX': 200,
- 'fromY': 400,
- 'toX': 200,
- 'toY': 100,
- 'steps': 50
- })
- time.sleep(1)
+ time.sleep(5)
self.driver \
- .touch('drag', {
- 'fromX': 100,
- 'fromY': 100,
- 'toX': 100,
- 'toY': 400,
- 'steps': 50
- })
+ .wait_for_element_by_name('Alert') \
+ .click()
+
+ time.sleep(5)
self.driver \
- .element_by_name('Alert') \
- .click()
+ .accept_alert()
- time.sleep(1)
+ time.sleep(3)
self.driver \
- .accept_alert() \
.back()
- time.sleep(1)
+ time.sleep(3)
self.driver \
- .element_by_name('Gesture') \
+ .wait_for_element_by_name('Gesture') \
.click()
+ time.sleep(3)
+
self.driver \
.touch('tap', {
'x': 100,
'y': 100
})
- time.sleep(1)
+ time.sleep(5)
self.driver \
.touch('doubleTap', {
@@ -110,7 +108,7 @@ def test_03_gesture(self):
'y': 100
})
- time.sleep(1)
+ time.sleep(5)
self.driver \
.touch('press', {
@@ -119,16 +117,7 @@ def test_03_gesture(self):
'steps': 100
})
- time.sleep(1)
-
- self.driver \
- .element_by_id('com.github.android_app_bootstrap:id/info') \
- .touch('pinch', {
- 'percent': 200,
- 'steps': 200
- })
-
- time.sleep(1)
+ time.sleep(5)
self.driver \
.touch('drag', {
@@ -139,11 +128,11 @@ def test_03_gesture(self):
'steps': 100
})
- time.sleep(1)
+ time.sleep(5)
self.driver.back()
- time.sleep(1)
+ time.sleep(5)
self.driver.back()
@@ -152,39 +141,39 @@ def test_04_webview(self):
.wait_for_element_by_name('Webview') \
.click()
- time.sleep(3)
+ time.sleep(5)
self.driver.save_screenshot('./webView.png') # save screen shot
switch_to_webview(self.driver) \
- .element_by_id('pushView') \
- .touch('tap')
+ .wait_for_element_by_id('pushView') \
+ .click()
switch_to_webview(self.driver) \
- .element_by_id('popView') \
- .touch('tap')
+ .wait_for_element_by_id('popView') \
+ .click()
def test_05_web(self):
switch_to_native(self.driver) \
- .element_by_name('Baidu') \
- .touch('tap')
+ .wait_for_element_by_name('Baidu') \
+ .click()
- time.sleep(3)
+ time.sleep(5)
self.driver.save_screenshot("./baidu.png")
switch_to_webview(self.driver) \
- .element_by_id('index-kw') \
+ .wait_for_element_by_id('index-kw') \
.send_keys('macaca')
self.driver \
- .element_by_id('index-bn') \
- .touch('tap')
+ .wait_for_element_by_id('index-bn') \
+ .click()
def test_06_logout(self):
switch_to_native(self.driver) \
- .element_by_name('PERSONAL') \
+ .wait_for_element_by_name('PERSONAL') \
.click()
- self.driver.element_by_name('Logout') \
+ self.driver.wait_for_element_by_name('Logout') \
.click()
if __name__ == '__main__':
diff --git a/tests/macaca-ios-sample.test.py b/tests/macaca-ios-sample.test.py
index 7b2142d..ecf97e3 100644
--- a/tests/macaca-ios-sample.test.py
+++ b/tests/macaca-ios-sample.test.py
@@ -8,11 +8,11 @@
desired_caps = {
'platformName': 'iOS',
- 'platformVersion': '10.0',
- 'deviceName': 'iPhone 5s',
+ 'deviceName': 'iPhone 6s',
'app': 'https://npmcdn.com/ios-app-bootstrap@latest/build/ios-app-bootstrap.zip',
}
+
server_url = {
'hostname': 'localhost',
'port': 3456
@@ -53,9 +53,10 @@ def test_01_login(self):
.element_by_xpath('//XCUIElementTypeSecureTextField[1]') \
.send_keys('111111') \
+ time.sleep(1)
+
self.driver \
- .element_by_name('Done') \
- .click()
+ .send_keys('\n')
self.driver \
.element_by_name('Login') \
@@ -105,14 +106,6 @@ def test_03_gesture(self):
time.sleep(1)
- self.driver \
- .touch('doubleTap', {
- 'x': 100,
- 'y': 100
- })
-
- time.sleep(1)
-
self.driver \
.touch('press', {
'x': 100,