https://github.com/appium/java-client/blob/master/src/test/java/io/appium/java_client/ApiDemos-debug.apk
该 apk 提供了 appium 所支持的 Api 的一些示例,是练习 appium api 最好的方式
同时父亲目录 https://github.com/appium/java-client/tree/master/src/test/java/io/appium/java_client 也都是些 java 方向测试样例代码。
https://github.com/appium/python-client/tree/master/test 和
https://github.com/appium/sample-code/blob/master/sample-code/examples/python/ python 也是如此,都是些 py 方向的测试样例。
你完全可以 git clone 下来 再导入 pycharm 来执行和学习这些 TestCase,且所有的 api 方法均可查到也有对应 API 的 TestCase
如 android 方向的 TestCase
https://github.com/appium/python-client/tree/master/test/functional/android
https://www.jianshu.com/p/d6c9a485c061
该文介绍了手机系统弹窗的几种方式,Toast、Dialog、Actionbar 和 Snackbar
http://www.software-testing-tutorials-automation.com/2015/12/appium-how-to-handle-alert-dialog-of.html
该文是很早的一篇介绍识别 alert dialog 弹窗的软文,内里说的许多 api 都已经无法使用了。
以下都可以拿来全面系统理解 appium 和练习英文。。。
http://www.software-testing-tutorials-automation.com/2015/09/appium-tutorials.html
http://www.software-testing-tutorials-automation.com/2015/10/appium-tutorials-part-2.html
http://www.software-testing-tutorials-automation.com/2015/12/appium-step-by-step-tutorials-for.html
webdriver selenium uiautomator2 appium 多少都有继承和依赖 webdriver 具体你 debug 或 ctrl+b 即可了解。
http://webdriver.io/api.html
https://seleniumhq.github.io/selenium/docs/api/py/index.html
https://developer.android.com/reference/android/support/test/uiautomator/package-summary.html?hl=zh-cn
http://appium.io/docs/en/about-appium/api/
https://github.com/appium/python-client
https://github.com/appium/appium/blob/71fac8d2759b18bb2a506a5c8359bfdf41a6443b/docs/cn/writing-running-appium/caps.md
https://testerhome.com/topics/3711
https://docs.python.org/3/library/unittest.html#module-unittest
如:self.d.find_element_by_name('App').click()
你可以尝试替换脚本中的该行,你将遇到错误 “selenium.common.exceptions.InvalidSelectorException: Message: Locator Strategy 'name' is not supported for this session” 实际 appium 在某一版本后已经不支持 by.name 定位了。
等等类似的问题,不胜枚举。你可以先无脑照抄,然后就会踩很多坑,然后慢慢调,然后找资料,然后自己根据该文的需求全部改为正确的。
强烈建议一行一行码,如此,这样会提高你的代码 debug 和查看 api 的能力,和了解 appium selenium webdriver 等包的继承依赖关系。实际就是用 pycharm ctrl+B 快捷键来看调用。
基本都是不可以直接拿来用的,我的 appium 是 1.7.2,都是自己看源码找 API,一个一个试错,然后调整正确的。
ubuntu16.04.3
pycharm 2017.3.3
python pyenv (ATX363 基于 python3.6.3)
appium: appium1.7.2
Appium-Python-Client (0.26)
selenium (3.8.1)
比如我们要练习 dialog 式的弹窗相关操作
跑脚本前需要启动 appium server
cmd@TR:~$ appium --session-override -p 4730
[Appium] Welcome to Appium v1.7.2
[Appium] Non-default server args:
[Appium] port: 4730
[Appium] sessionOverride: true
[Appium] Appium REST http interface listener started on 0.0.0.0:4730
APIDemosTest.py
# coding:utf-8
from appium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
import unittest
# packagename = 'com.example.android.apis'
# activity = '.ApiDemos'
# 以上注释掉的 是这个链接下的apk,https://github.com/appium/python-client/blob/master/test/apps/ApiDemos-debug.apk
# 我实际用的是java.client里的ApiDemos-debug.apk 这两个包和activity名字不一样的。java的更新的新一些,我用的是1.7.2所以用的java的。
packagename = 'io.appium.android.apis'
activity = '.ApiDemos'
class APIDemosTest(unittest.TestCase):
def setUp(self):
desired_caps = {"platformName": "Android",
"platformVersion": "6.0.0.",
"deviceName": "simulator",
"udid": "192.168.56.101:5555",
"appPackage": packagename,
"appActivity": activity,
"noReset": True,
'newCommandTimeout': 30,
"unicodeKeyboard": True,
"resetKeyboard": True,
'automationName': 'Appium',
"noSign": True}
remote = "http://localhost:4730/wd/hub"
self.d = webdriver.Remote(remote, desired_caps)
def test_okOnAlert(self):
sleep(3)
self.d.find_element_by_android_uiautomator('new UiSelector().text("App")').click()
self.d.find_element_by_android_uiautomator('new UiSelector().text("Alert Dialogs")').click()
self.d.find_element_by_accessibility_id('OK Cancel dialog with a message').click()
AlertTitle = self.d.find_element_by_id('android:id/alertTitle').get_attribute('text')
print('Alert Title text is ->',AlertTitle)
self.d.find_element_by_android_uiautomator('new UiSelector().text("OK")').click()
sleep(3)
def tearDown(self):
try:
self.d.quit()
except:
pass
if __name__ == '__main__':
try:
suite = unittest.TestLoader().loadTestsFromTestCase(APIDemosTest)
unittest.TextTestRunner(verbosity=2).run(suite)
except SystemExit:
pass