Appium Appium ApiDemos alert dialog 练习记录

老马 · 2018年01月30日 · 最后由 zhaoweijixiang 回复于 2019年06月26日 · 3763 次阅读

引用参考:

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

参考 API:

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)

练习 alert dialog

比如我们要练习 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
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 1 条回复 时间 点赞

你好,alert dialog 弹窗捕捉到元素,但是 click 仍然没有响应,也没有任何报错。。。还有别的方法吗?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册