7.6 在Appium中查找控件
有很多读者可能会问如何获取手机应用活动各种组件的信息。最常见的是使用UI Automator Viewer①,本节将重点介绍使用Appium自带的Inspector工具的应用。
7.6.1 Appium Inspector界面
在做自动化测试时,经常在代码执行过程中因为选择的元素定位方式不准确而无法唯一地定位元素,导致测试执行报错。于是,需要修改定位方式后再次运行,查看运行结果,这样会导致时间的浪费。如何在测试执行前查看我们选择的元素定位策略能否唯一地查找到控件呢?Appium集成了查找控件的办法帮我们解决这个问题。例如,使用selendroid-test- app-0.17.0.apk定位email控件。
在图7-27中设置Desired Capabilities,设置示例见表7-2。
设置完成后单击Start Session按钮,启动一个会话,如图7-31所示。
图7-31 Appium Inspector
加载Appium Session可能需要一些时间,尤其是云服务。当Session加载完成后,App的截图会出现在应用程序的左边。可以用鼠标选择界面元素,被选中的元素将高亮显示,如图7-31所示。
中间的App Source面板显示元素的层级结构,以XML方式展示,可以在这个层级结构上选中元素,左边的界面上同样会高亮显示。
当一个元素高亮显示时,右边的Selected Element面板显示的是选中元素的细节,这个细节包括识别方式、操作按钮和属性列表。
7.6.2 Selected Element面板
当元素高亮显示时,还可以对元素进行操作,如单击Tap按钮完成单击操作,单击Send Keys按钮完成发送数据(如果它是一个文本控件)。例如使用selendroid-test-app-0.17.0.apk定位email控件。
1.操作按钮
操作按钮如图7-32所示。多个按钮的功能如下。
" Tap按钮:单击被选元素。
" Send Keys按钮:对被选元素赋值(针对文本控件)。
" Clear按钮:清空备选元素值。
当对元素进行操作时,Inspector会发送一系列的命令给Appium,Appium将执行这些操作。如果执行成功,更新截图;如果失败,弹出报错信息。例如单击"E-mail"中输入"sh***@126.com"值,执行如下步骤。
(1)单击Send Keys按钮。
(2)在弹出的Send Keys对话框中输入"sh***@126.com",如图7-33所示。
(3)单击Send Keys按钮。如图7-34所示,更新截图界面,E-mail字段赋值完成。
图7-34 操作后页面截图更新
Appium日志中也可以看到执行的相关信息,如图7-35所示。
图7-35 Appium日志
2.元素识别
元素识别一直是UI自动化测试的难点所在,Appium在该表格中给出唯一定位元素的方式,方便书写自动化测试用例,如图7-36所示。值得注意的是,有时Selector列给出的值太过复杂,建议修改和确认后再使用。
3.属性值
该区域中显示元素的详细信息,如图7-37所示,为后面章节中讲述的元素定位方式提供依据。
7.6.3 操作区域
为了方便调试,Appium的Inspector集成了以下操作,如图7-38所示。各个图标的功能如下。
图7-38 操作区域的图标
" Select Elements:选中元素。选中后,当在截图上选中元素时,元素会高亮显示,同时中间层级结构高亮显示被选中元素对应的层级。右侧显示元素的详细信息。
" Swipe By Coordinates:通过坐标点滑动。选中后,截图上光标呈现"+"形,同时在左上角显示光标所在位置的坐标。滑动操作后,Inspector会发送一系列的命令给Appium,Appium将执行滑动操作。如果执行成功,更新截图;如果失败,则弹出报错信息。
" Tap By Coordinates:通过坐标点进行单击。选中后,截图上光标呈现"+"形,同时在左上角显示光标所在位置的坐标。单击操作后,Inspector会发送一系列的命令给Appium,Appium将执行滑动操作。如果执行成功,更新截图;如果失败,则弹出报错信息。
" Back:相对于调用driver.back方法,执行后退操作。
" Refresh:更新页面截图。
" Start Recording:启动录制。
" Search for element:查找元素。支持在Android上采用id、xpath、name、classname、accessibility id、uiautomator selector对元素进行查找。
" Quit the session:相当于调用driver.quit,执行关闭Inspector的操作。
7.6.4 调试定位方式
在Appium的Inspector上,单击Search for element图标,弹出Search for element对话框,如图7-39所示。
图7-39 Search for element对话框
选择Locator Strategy(定位方法)、Selector(定位值),单击Search按钮进行查找。
1.未找到元素
查找完成后,标题Elements后的数据为查找到的数量。如果查找不到,编辑框中将提示"Could not find any elements",并且标题Elements后的数据为0,如图7-40所示。
图7-40 未查找到控件元素
2.查找到多个元素
找到多个元素后,标题Elements后显示找到的元素数量。编辑框中以列表的形式显示所有通过该定位方式查找到的元素记录,如图7-41所示。
图7-41 找到多个控件元素
在图7-41中,Elements(13) 中的13表示本次共查到了13个元素。下拉框的数字编号分别表示这13个元素在Search for element方法里的编号。根据笔者的经验,这个编号每次并不是都从1或者0开始顺次累加,起始编号也许从某一个数值开始。这次查询结果中第一个元素的编号就从29开始,总共有13个元素。
3.找到唯一的元素
如图7-42所示,Elements后的元素数量为1,编辑框中只有一条记录,表示通过该定位方式可以唯一定位到的元素。
图7-42 找到唯一的控件元素
4.操作元素
通过在编辑框中选择一条记录,操作按钮(Tap Element、Clear和Send Keys)会从灰色状态变成可用状态。可以对选中元素进行操作,如图7-43所示。
图7-43 选中查找到的控件元素
在图7-43中,E-mail控件为文本控件,可以进行输入操作,输入"sh***@126.com"后,单击Send Keys按钮。Appium将执行这些操作命令。如果执行成功,则更新截图为操作命令执行后的截图,如图7-44所示;如果失败,将会弹出报错信息。
图7-44 操作查找到的控件元素
7.7 Appium录制功能
Appium和其他自动化框架一样提供了非常基本的录制功能,这些录制的代码可以直接复制和粘贴到客户端,便于测试使用。通过录制可以用最简单的方式将人的手工动作转化为程序代码。在真正的自动化过程中,录制下来的自动化代码还需要修正,并不能直接使用,因为其成功率比较低。
在Appium界面中单击录制按钮开始进行录制。操作步骤为进入注册页面,在Username文本框中输入"sh***",在E-mail文本框中输入"sh***@126.com"。
在App Source中选中元素,在Selected Element中进行各种操作,如输入值等。操作步骤会记录到Recorder中。执行结果如图7-45所示。
图7-45 在Appium中使用录制功能
在Recorder后面的下拉框中可以选中对应的编程语言和框架。在Java环境下,系统默认选中java-Junit模式进行录制。
Appium界面中Show/Hide Boierplate Code的作用是显示/隐藏模板代码。如果显示,代码中将会包含Desired Capabilities设置、Session启动以及Junit模板代码;如果隐藏,只显示操作命令,如代码清单7-1所示。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。