英文原版:https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/migrating-to-1-0.md

Migrating your tests from Appium 0.18.x to Appium 1.x

把你的测试从Appium版本0.18.x迁移至Appium1.x版本

Appium 1.0 has removed a number of deprecated features from the previous versions. This guide will help you know what needs to change in your test suite to take advantage of Appium 1.0.

Appium1.0把一些陈旧无效的功能从老版本中踢走,如果你想把你的测试升级到基于Appium1.0的话,本向导会告诉你需要怎么搞。

New client libraries

新的客户端库 

The biggest thing you need to worry about is using the new Appium client libraries instead of the vanilla WebDriver clients you are currently using. Visit the Appium client list to find the client for your language. Downloads and instructions for integrating into your code are available on the individual client websites.

你需要做得最重大的事情是用我们最新的Appium客户端库来取代掉原来在用的普通平凡的WebDriver客户端库,请查看Appium client list 来找到你在使用的对应开发语言的客户端版本。至于怎么下载和集成到你的代码的话里面各自有对应的页面做解答。

Ultimately, you'll be doing something like (to use Python as an example):

最终其实你需要做得事情大概如下(以Python为例):

from appium import webdriver

Instead of:

取代原来的:

from selenium import webdriver

New desired capabilities

新的capabilities选项

The following capabilities are no longer used: 

以下的capabilities将不再使用:

  • device
  • version

Instead, use these capabilities:

以下的capabilities将取而代之:

  • platformName (either "iOS" or "Android")
  • platformVersion (the mobile OS version you want)
  • deviceName (the kind of device you want, like "iPhone Simulator")
  • automationName ("Selendroid" if you want to use Selendroid, otherwise, this can be omitted)

The app capability remains the same, but now refers exclusively to non-browser apps. To use browsers like Safari or Chrome, use the standard browserName cap. This means that app and browserName are exclusive.

之前的app这项capability保留不变,但该项现在专门用在非browser类型的app上面。如果你要测试的是基于Safari或Chrome等浏览器的应用,请使用标准的browserName这项capability。也就是说app和browserName都是专用的选项。

We have also standardized on camelCase for Appium server caps. That means caps like app-package or app-wait-activity are now appPackage and appWaitActivity respectively. Of course, since Android app package and activity are now auto-detected, you should be able to omit them entirely in most cases.

同时我们也用骆驼命名法重新统一命名了我们的Appium Server的capabilities。比如说原来的app-package和app-wait-activity将改成appPackage和appWaitActivity。当然,鉴于我们能自动检测到Android应用的包和activity,所以你可以大多时候忽略掉这些选项了。

New locator strategies 

新的控件查找器策略

We've removed the following locator strategies:

我们把以下的控件查找器策略给移除掉了:

  • name
  • tag name

We have now added the accessibility_id strategy to do what name used to do. The specifics will be relative to your Appium client.

我们现在引入了accessibility_id这个策略来取代原来name所做的事情(译者注:也就是说原来的AppiumDriver.findElementByName将会被现在的AppiumDriver.findElementByAccessibilityId取代)。当中细节将会根据你使用的Appium客户端(译者注:客户端语言)而有所不同。

tag name has been replaced by class name. So to find an element by its UI type, use the class name locator strategy for your client.

新的class name将会取代原来的tag name(译者注:也就说原来的findElementByTagName将会被想在的findElementByClassName取代),所以如果你要根据一个控件的UI类型来查找出该控件,请使用class name这个控件查找器。

Note about class name and xpath strategies: these now require the fully-qualified class name for your element. This means that if you had an xpath selector that looked like this:

注意class name和xpath策略的变化:你现在需要使用FQCN来描述你的控件。也就是说如果你由一个xpath选择子如下所述:

//table/cell/button

It would now need to be:

那么现在要改为(译者注:也就是说原来的findElementByXpath(""//TextView[contains(@text,'Add note')]"")将需要改成findElementByXpath("//android.widget.TextView[contains(@text,'Add note')]"):

//UIATableView/UIATableCell/UIAButton

(And likewise for Android: button now needs to be android.widget.Button)

(如此类推:button现在就要写成android.widget.Button)

We've also added the following locator strategies:

同时我们也添加了如下的控件定位器策略(译者注:也就是说入Andoid增加了AppiumDriver.findElementByUiAutomator):

  • -ios uiautomation
  • -android uiautomator

Refer to your client for ways to use these new locator strategies.

请根据你使用的客户端(根据不同语言)库来确定如何使用新的控件定位器策略。

XML, not JSON 

使用JSON取代XML

App source methods, which previously returned JSON, now return XML, so if you have code that relies on parsing the app source, it will need to be updated.

取得当前窗口的源码(译者注:也就是AppiumDriver.getPageSource函数)返回的格式将从原来的JSON改成XML。所以如果你之前的代码有依赖分析控件源码的地方必须做相应的更新。

Hybrid support through context, not window

混合应用通过context而非window进行支持

Hybrid apps were previously supported by switching between "windows" using:

之前的混合应用是通过切换"windows"来获得支持的:

  • window_handles
  • window
  • switch_to.window

Now Appium supports the more conceptually consistent concept of "context". To get all of the available contexts, or the particular context the application is is, you use

如今Appium支持(跟切换上下文这个概念)更加概念一致的的“context”。为了取得所有可用的上下文或者你的应用特有的上下文,请使用如下方式:

# python
driver.contexts
current = driver.context
// javascript
driver.contexts().then(function (contexts) { /*...*/ })
// c#
driver.GetContexts ()
driver.GetContext ()
// java
Set<String> contextNames = driver.getContextHandles();
String context = driver.getContext();
// php
$contexts = $this->contexts();
$context = $this->context();
# ruby
contexts = available_contexts
context = current_context

And to switch between them, you use

请使用如下方式进行切换:

# python
driver.switch_to.context("WEBVIEW")
// javascript
driver.currentContext().then(function (context) { /*...*/ })
// c#
driver.SetContext ("WEBVIEW");
java
driver.context(contextName);
// php
$this->context('WEBVIEW');
# ruby
set_context "WEBVIEW"

No more execute_script("mobile: xxx")

execute_script("mobile: xxx")将销声匿迹

All the mobile: methods have been removed, and have been replaced by native methods in the Appium client libraries. This means that a method call like driver.execute("mobile: lock", [5]) will now look something more likedriver.lock(5) (where lock has been turned into a native client method). Of course, the details on calling these methods will differ by client.

所有”mobile:”相关的方法讲都会被剔除掉,并且被Appium客户端库的原生方法给替代掉。例如原来的driver.execute("mobile:lock",[5])将会被现在的driver.lock(5)所取代(这里lock这个功能已经成为了原生的客户方法了)。当然,具体的调用方法将会根据你所使用的不同的客户端库而有所不同了。

Of particular note, the gesture methods have been replaced by the new TouchAction / MultiAction API which allows for a much more powerful and general way of putting gestural automation together. Refer to your Appium client for usage notes on TouchAction / MultiAction.

需要特别声明的是,手势操作相关的方法将会被新的TouchAction/MultiAction API所替代,把这些手势操作集合在一起将会使得你的手势操作相关的自动化更强大和通俗易懂。更详细的TouchAction/MultiAction的使用请查看你的的Appium客户端。

And that's it! Happy migrating!

完!迁移快乐!

作者 自主博客 微信服务号及扫描码 CSDN
天地会珠海分舵 http://techgogogo.com 服务号:TechGoGoGo扫描码:

http://blog.csdn.net/zhubaitian

Appium0.18.x迁移到Appium1.x须知事项的更多相关文章

  1. Appium0.18.x迁移到Appium1.x须知事项(灰常实用,解答了本人几个疑问)

    英文原版:https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/migrating-to-1-0.md Migr ...

  2. 将数据从MySQL迁移到Oracle的注意事项

    将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...

  3. Django学习系列18:使用迁移创建生产数据库

    Django生成一个很有帮助的错误信息,大意是说没有正确设置数据库. 你可能会有疑惑,为什么在单元测试一切都运行ok,这是因为Django为单元测试创建了专用的测试数据库——这是Django中Test ...

  4. TP框架中用tp模版迁移smarty模版的注意事项

    ThinkPHP使用Smarty模板引擎的流程及注意事项在多人合作的项目中,Smarty模板使用的最多,具体原因百度. 而ThinkPHP中默认使用的模板是Think自己的模板,这就需要修改默认的模板 ...

  5. Xamarin迁移到 Unified API 注意事项

    参考官方文档: Migrating to Unified API for Components #if __UNIFIED__ ... // Mappings Unified CoreGraphic ...

  6. 第二章 Vue快速入门-- 18 v-for中key的使用注意事项

    注意:如果属性和方法还没定义直接使用的话,就会报   xxx is not defined 导致界面不能正常显示.我看视频教程里老师的可以直接使用,而且界面正常显示,可能是vue版本不同吗?还不清楚 ...

  7. 【转】Appium基于安卓的各种FindElement的控件定位方法实践

    原文地址:http://blog.csdn.net/zhubaitian/article/details/39754041#t11 AppiumDriver的各种findElement方法的尝试,尝试 ...

  8. Appium基于安卓的各种FindElement的控件定位方法实践和建议

    AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用. 1. findElementByName 1.1 示例 el = driver.fin ...

  9. Appium基于安卓的各种FindElement的控件定位

    转自:http://www.2cto.com/kf/201410/340345.html 1. findElementByName 1.1 示例 ? 1 2 el = driver.findEleme ...

随机推荐

  1. shuffle一个简单的过程叙述性说明

    shuffle它是在map和reduce过程之间.我们看看在这个过程中的步骤,了解在这个问题上不深,有可能是一个错误.忘记修正 1. map map出口key,value,里的context.writ ...

  2. POJ 3414--Pots(BFS+回溯路径)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9963   Accepted: 4179   Special Ju ...

  3. Scrum三头猪

    猪和鸡在过去进入业务合作.他们都打算开一家餐厅,它的售价火腿和鸡蛋. 这想了一下时间猪,我用他的肉,鸡只是用它生下的蛋.万一生意失败,我自己的命就没,,没有不论什么影响. 1. Scrum两类关系人 ...

  4. 用python做oj上的简单题(持续更新中.......)

    本人刚開始接触python,在oj上解一些简单的题,欢迎交流,不喜勿喷. OJ地址链接:acm.sdut.edu.cn http://acm.sdut.edu.cn/sdutoj/showproble ...

  5. SVN目录对号图标(更新、冲突)不显示

    长谈想知道,大约SVN这些冲突.变化.加入.不显示问题etc目录下的复选图标,退房的在线信息,多数说的更改icon的settings,后来,一点点仔细阅读SVN配有英文说明文档,我相信,改变是有点问题 ...

  6. SQL Server审计功能入门:CDC(Change Data Capture)

    原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...

  7. Android日志收集功能设计和实施报告(总)

    几乎所有的应用程序开发者都知道"用户体验"重视,为了增强用户体验是从全面的监测和报告制度密不可分,在这些日志(控制Crash报告)是主要的问题跟踪和解决工具. 日志上报系统.首先看 ...

  8. centos7 高速安装 mariadb(mysql)

    从最新版本的linux该系统启动,缺省值是 Mariadb代替mysql! 使用系统自带repos安装非常easy: yum install mariadb mariadb-server system ...

  9. ajaxfileupload.js插件结合一般处理文件实现Ajax无刷新上传

    先上几张图更直观展示一下要实现的功能.本功能主要通过Jquery ajaxfileupload.js插件结合ajaxUpFile.ashx一般应用程序处理文件实现Ajax无刷新上传功能,结合NPOI2 ...

  10. Display Database Image using MS SQL Server 2008 Reporting Services

    原文 Display Database Image using MS SQL Server 2008 Reporting Services With the new release of MS SQL ...