转自:http://www.jianshu.com/p/bf1ca3d4ac76

写这篇文章的心情

真的很开心,我看着官网介绍竟然对AppiumDesktop略懂皮毛了。今天特意写出来,希望可以帮助一些初入坑的伙伴们。AppiumDesktop真的是一个好东西:

1、首先他可以定为元素信息(这里所说的元素是指App上的空间),这一点它和Android自带的uiautomatorviewer一样,但是AppiumDesktop可以定位iOS和Android两个操作系统的App;

2、还有一点他可以录制脚本。这真的就很牛逼了。脚本语言还可以自己选择,比如我选择使用Python语言,那么录制出的脚本就是Python语言的。但是对于这一点上官网说了,这个功能只做学习的工具,不能够作为代码生成器(In sum, it is a learning tool, not a robust code generation feature, and should be used as such.)。

AppiumDesktop.png

上图就是AppiumDesktop Inspactor启动以后的样子,接下来咱们就讲讲怎么用这个神秘的AppiumDesktop。

什么是AppiumDesktop

有人说AppiumDesktop是Appium新版的叫法,也就是在Xcode8之前和之后的叫法。因为Xcode8之前自带的自动化测试框架叫做uiAutomation,Xcode8之后完全弃用了这一框架,开始使用XCUITest,这导致Appium大修其下层机制,以使用Facebook的WebDriverAgen

,也就是从这个时候在用Appium测试iOS应用的时候必须在iPhone手机上首先安装一个应用叫:WebDriverAgentRunner。也就是通过这个应用来启动我们被测应用。

所以AppiumDesktop不是Appium

Appium的图标是这样的:

Appium.png

AppiumDesktop的图标是这样的:

Appium Desktop.png

AppiumDesktop启动以后的页面是这样的:

AppiumDesktop启动页面.png

AppiumDesktop 服务启动的页面(AppiumDesktop现在已经是1.6.5版本)是这样的:

AppiumDesktop Server启动页面.png

AppiumDesktop启动的页面是这样的:

Appium启动页面.png

启动Appium Inspector

启动AppiumDesktop以后点击该页面右上角的Start New Session按钮,就会启动一个新的会话窗口(如下图),在这个窗口我们需要配置一些Desired Capabilities信息:

Desired Capabilities.png

这里是以iPhone 7 Plus模拟器为例进行讲解:

platformName:因为用的是iOS手机

platformVersion:和实际模拟器版本一致,我的模拟器是10.3版本

deviceName:我是用的iPhone 7 Plus,你也可以填写iPhone Simulator,会启动一个默认的(iPhone 6)模拟器

app:所要安装的app这里安装的是官方提供的一个Demo。当然也可以安装自己待测app,但是就不一定是text了(可能是filepath)

noReset:是一个bool值,选TRUE。

如果想要使用真机,必须再加一个字段udid,是text类型。

通过终端获取已连接电脑的iPhone的 udid方法:

idevice_id -l

配置好这些信息以后点击Save As...进行保存,保存以后以备日后使用(如果需要),这些信息被保存在“Saved Capability Sets”里。然后点击Start Session就可以启动Inspector了,这个过程比较慢,需要稍等几分钟。然后就会出现文章第一个图所示的窗口。

定位元素信息

写Appium脚本的最重要的一个信息是定位元素,获取元素的ID或者xpath等等类似的信息。

只需要点击Inspector最左边一栏的Select按钮,然后再去点击所要获取信息的元素即可,当元素突出显示时,其信息将显示在Inspector右侧的详细视图中。有些是用accessibility id 定位,有些是xpath定位或者其他的定位信息,但是在iOS应用上Appium推荐使用accessibility id 来定位一个元素信息。

在Inspector窗口的中间是您的应用程序的层次结构,表示为XML。

滑动页面(元素)

现在可以定位当前页面的元素了,但是怎么滑动到下一个页面或者怎么滑动页面上的滑动条(slider)呢?

选中Swipe。模拟在手机上的操作手势,从起点到终点各点击一下,就实现了滑动。

点击某一个元素

如果我们想要点击某一个元素进行下一步操作,比如在输入框内输入文本或者弹出一个alert该怎么操作呢?

选中Tap。然后再去点击textfield或者alert我们就可以进行下一个操作了。如果想要定位alert上的元素信息,那就在alert弹出的时候在切换到Select,然后点击想要定位的元素就行了。

录制脚本

这真的是一个很实用的功能。他似乎解决了我们一个大问题,那就是该使用哪个API的问题以及脚本的编写规范的问题。对于初步入坑的小伙伴来说是一个很好的参考。脚本录制功能就是那个眼睛图标,如下图:

脚本录制.png

点击该按钮以后如下图:

脚本录制.png

然后就可以在左边随便对App进行操作了,此处我进行的操作有:点击输入框,点击Alert,滑动滑动条,滑动屏幕,点击软键盘并输入文本(这里我选择是Python语言)。这时候Inspector生成的脚本是非常简单的,只是对你操作的步骤进行记录,还不能执行,这段脚本如下:

TouchAction(driver).tap([(167, 73)])

TouchAction(driver).tap([(81, 300)])

TouchAction(driver).tap([(303, 414)])

el1 = driver.find_element_by_accessibility_id("IntegerA")

el1.click()

el1.send_keys("Hello")

TouchAction(driver)

.press({x: 198, y: 393})

.moveTo({x: 50: y: 0})

.release()

TouchAction(driver)

.press({x: 335, y: 264})

.moveTo({x: -183: y: -3})

.release()

TouchAction(driver).tap([(191, 498)])

TouchAction(driver).tap([(357, 698)])

反正我没看懂这段代码。别担心,这只是Inspector默认生成的极简脚本,善良的Inspectory为我们提供了一个功能那就是将极简脚本变成可执行脚本,操作如下图:

脚本录制.png

现在脚本就变成了这个样子:

# This sample code uses the Appium python client

# pip install Appium-Python-Client

# Then you can paste this into a file and simply run with Python

from appium import webdriver

caps = {}

caps["platformName"] = "iOS"

caps["platformVersion"] = "10.3"

caps["deviceName"] = "iPhone 7 Plus"

caps["app"] = "http://appium.s3.amazonaws.com/TestApp7.1.app.zip"

caps["noReset"] = True

driver = webdriver.remote("http://0.0.0.0:4723/wd/hub", caps)

TouchAction(driver).tap([(167, 73)])

TouchAction(driver).tap([(81, 300)])

TouchAction(driver).tap([(303, 414)])

el1 = driver.find_element_by_accessibility_id("IntegerA")

el1.click()

el1.send_keys("Hello")

TouchAction(driver)

.press({x: 198, y: 393})

.moveTo({x: 50: y: 0})

.release()

TouchAction(driver)

.press({x: 335, y: 264})

.moveTo({x: -183: y: -3})

.release()

TouchAction(driver).tap([(191, 498)])

TouchAction(driver).tap([(357, 698)])

driver.quit()

这样是不是就和我们写的脚本格式一样了,你学会了吗?

在学习过程中遇到问题可以留言,互相学习,共同进步!

作者:会做饭的厨子
链接:http://www.jianshu.com/p/bf1ca3d4ac76
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

AppiumDesktop用法介绍的更多相关文章

  1. 好压(HaoZip)的命令行模式用法介绍

    好压压缩软件,又叫“2345好压”,是一款国产的优秀压缩软件,目前是免费的,据官网介绍,该软件永久免费.官网地址:http://haozip.2345.com/ 本文主要对该软件的命令行模式用法进行介 ...

  2. sql事务(Transaction)用法介绍及回滚实例

    sql事务(Transaction)用法介绍及回滚实例 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务, S ...

  3. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  4. 怎么通过activity里面的一个按钮跳转到另一个fragment(android FragmentTransaction.replace的用法介绍)

    即:android FragmentTransaction.replace的用法介绍 Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,他们之间最 ...

  5. Oracle CASE WHEN 用法介绍[Z]

    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

  6. LinqToXml高级用法介绍

    LinqToXml高级用法介绍 一.函数构造 什么是函数构造?其是指通过单个语句构建XML树的能力. 那么它有什么作用呢? 作用1.用单个表达式快速创建复杂的XML树 见实例代码CreateXml( ...

  7. Oracle学习笔记_06_CASE WHEN 用法介绍

    1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex ' THEN '男' ' THEN '女' ELSE '其他' END --Case搜索函数 CASE ' THEN ...

  8. mysql进阶(六)模糊查询的四种用法介绍

    mysql中模糊查询的四种用法介绍 这篇文章主要介绍了mysql中模糊查询的四种用法,需要的朋友可以参考下. 下面介绍mysql中模糊查询的四种用法: 1 %: 表示任意0个或多个字符.可匹配任意类型 ...

  9. object-fit 属性的用法介绍

    这个要在宽,高都是100%的情况下才能提现 object-fit 属性的用法介绍 fill(不保持纵横比缩放图片,使图片完全适应) contain(保持纵横比缩放图片,使图片的长边能完全显示出来) c ...

随机推荐

  1. mysql 触发器(trigger)

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...

  2. Luogu P1451 求细胞数量

    题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=100)? 输入输出格式 输 ...

  3. SVN 、Git、Github的使用

    1.1 SVN 总结以及使用建议 每一次保存历史记录实际上就是一次提交 什么时候去保存历史记录? 完成了一个具体的功能模块 代码运行没有bug 当天工作结束提交一次 没有 bug 的前提下去提交一次 ...

  4. 重定向URL

    重定向的原因有哪些?[1]网址变更了[2]权限不够 [1]网址变更了 [举例]以google为例,之前我们可以访问www.google.cn,但是后来Z.F不让我们访问它了,那么google公司为了避 ...

  5. Linux删除其他程序正在使用的文件

    今天在逛论坛时发现网友提的一个问题: 今天做实验发现,当前活动日志丢失后,数据库居然还可以正常写数据,还可以正常提交,如果是ORACLE,这个时候数据库已经崩溃了,很奇怪DB2这个时候把事务写到哪儿去 ...

  6. noip普及组2005 陶陶摘苹果

    陶陶摘苹果 描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ...

  7. java protected修饰符理解

    Protected类型可以在本包和子类中访问的含义.在本包中访问,顾名思义,可以在定义类的包中的任何地方申请一个包含protected修饰符的域和方法的类的对象,并通过这个对象访问被protected ...

  8. oracle运行速度与效率高的秘密

    使用过Oracle的人都知道,Oracle的运行速度与效率,在同类数据库中是名列前茅的,特别是对大量数据进行访问时,更加有出色的表现.那么,Oracle数据库是靠什么实现的呢?笔者下面将通过一系列的文 ...

  9. 归并排序(Java)

    选择排序的升级版本归并排序, 归并排序有二路归并,三路归并和多路归并,我这次只分析下二路归并,有机会在分析下别的. 归并排序的思想是这样的: 设数组a中存放了n个数据元素,初始时我们把它们看成是n个长 ...

  10. Java中"==" 和 equals 的区别

    "=="比较的是地址值 equals 比较的是内容 看例子能够更加清晰的理解 eg: String s1="java",s2="java"; ...