Appium [翻译]appium 迁移到 1.x 的指导文档

思寒_seveniruby · 2014年05月28日 · 最后由 思寒_seveniruby 回复于 2014年05月28日 · 945 次阅读

把 appium 0.18.x 上的测试用例集迁移到 appium1.x 上

Appium 1.0 已经从先前的版本中移除了一部分过时的特性, 这个指导文档会帮助你了解使用 Appium 1.0 需要做的具体改变.

新的客户端库

你需要关注的最大的改变是利用新的 appium 的 client libraries 来替换原生的 WebDriver ciients. 访问Appium client list 去寻找符合你自己编程语言的客户端库吧. 在每个客户端的网站上都可以找到用于集成到你代码中的依赖库相关介绍和下载

基本上, 你需要做如下的改变 (以 Python 作为例子)

from appium import webdriver

替换原来的:

from selenium import webdriver

新的适配参数

下面的适配参数将不再使用

  • device
  • version

取而代之的是利用下面的配置参数

  • platformName ("iOS" 或者 "Android")
  • platformVersion (你希望测试的 os 版本)
  • deviceName (你想用的设备, 比如 "iPhone Simulator")
  • automationName ("Selendroid" 如果你想使用 Selendroid 的话, 否则可以省略)

app 配置参数保持不变, 但是特指非浏览器的 app, 如果你想使用类似 Safari 或者 Chrome 这样的浏览器, 你需要设置browserName. 这代表appbrowserName是互斥的.

我们把 appium 的配置参数都规范为驼峰拼写法 (camelCase), 这代表着原来的app-package或者app-wait-activity现在会变成appPackageappWaitActivity. 当然目前 android 的 app package 和 activity 都已经是自动探测了, 大部分情况下你可以省略这两个配置项.

新的定位方式

我们已经移除了下面的定位方式

  • name
  • tag name

我们增加了accessibility_id定位方法去做过去name做的事情. 具体的细节还得跟你使用的 Appium 客户端库有关.

tag name已经被替换为class name. 所以想通过 UI 的类型来定位某个元素, 你需要使用 class name 定位方式

关于class namexpath的定位方式: 现在需要使用完整的全类名, 这意味着如果你有一个如下的定位用的 xpath

//table/cell/button

现在需要改成

//UIATableView/UIATableCell/UIAButton

如果是 android 的话, button需要改变成android.widget.Button

我们也增加了如下的定位方式

  • -ios uiautomation
  • -android uiautomator

根据你使用的客户端去相应的使用新的定位方式

使用 xml, 不再是 json 了

App source 方法先前返回 JSON, 现在修改成返回 XML. 所以如果你有代码是依赖解析 app source 的, 那么就需要更新

通过 context 支持混合应用, 不再是 window 了

以前混合 app 的切换支持是通过"windows"

  • window_handles
  • window
  • switch_to.window

现在 Appium 支持"context" 概念了, 要获得当前环境下所有的上下文 (contexts), 或者特定的 context, 你可以用

driver.contexts
current = driver.context

在这些 context 之间切换, 可以使用

driver.switch_to.context("WEBVIEW")

没有了execute_script("mobile: xxx")

所有的mobile:方法都已经被移除, 并且被替换为 appium client libraries 的原生方法. 这意味着如果一个方法调用原来的方式是
driver.execute("mobile: lock", [5])
现在需要更新为
driver.lock(5)
在这个地方lock已经变成了原生的客户端方法. 当然具体的调用细节在不同的客户端库中的实现可能会有所差别.

特别需要注意的是, 手势 (gesture) 方法已经被替换为 TouchAction / MultiAction API, 它允许更强大通用的组合手势的自动化. 可以参考你的客户端库的具体用法.

这就是全部啦, 祝迁移愉快

(文档由 testerhome.com 翻译, 欢迎更多热爱技术的同学加入到翻译中来, We Love Appium)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 1 条回复 时间 点赞

我已经 merge 过去了

对应的 commit
https://github.com/testerhome/appium/pull/24/files

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