RobotFramework自动化测试框架-移动手机自动化测试Input Text和Click Button关键字的使用
Input Text和Click Button
Input Text 关键字一般用来给输入框进行输入操作,该关键字接收两个参数[ locator | text ]。
示例1:启动安卓手机上一个APP的MainActivity,在打开Activity,进入界面后,分别向两个EditText输入框中输入12,并且点击按钮“计算”来计算出输入的这两个数字的乘积。
APP的界面如下,提供了两个输入框,还有一个计算的Button按钮。

在写这个自动化案例前,我们可以使用安卓SDK提供的Ui Automator Viewer工具来进行这个界面的资源定位。通过定位后,可以看到第一个EditText输入框的resource-id为com.example.calculator:id/factorone,class为android.widget.EditText,name为请输入数字,如下图所示。

第二个EditText输入框的resource-id为com.example.calculator:id/factortwo,class为android.widget.EditText,name为请输入数字,如下图所示。

Button按钮的resource-id为com.example.calculator:id/commit,class为android.widget.Button,name为计算,如下图所示。

Click Button关键字用来模拟点击APP上的一个button按钮,该关键字接收一个参数[ index_or_name ]。
Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=22 deviceName=98YFBP522VSU app=C:/Users/yongqing/Desktop/app-debug.apk appPackage=com.example.calculator appActivity=MainActivity
Input Text id=com.example.calculator:id/factorone 12
Input Text id=com.example.calculator:id/factortwo 12
Click Button 计算
执行结果:

可以看到已经执行成功,上面是通过resource-id的方式来定位EditText输入框,并且通过name的方式来定位button按钮。
下面通过另一种方式,用name的方式来定位EditText输入框,通过index的方式来点击button按钮
Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=22 deviceName=98YFBP522VSU app=C:/Users/yongqing/Desktop/app-debug.apk appPackage=com.example.calculator
Input Text name=请输入数字 12
Input Text name=请输入数字 14
Click Button index=0
执行结果:

在通过index的方式来点击button按钮的时候,需要注意index的取值,不要和通过Ui Automator Viewer工具看到的index混淆,先看一段AppiumLibrary库的源码,在这里选取了源码中的三个函数。从如下三个函数中可以看到click_button关键字支持name和index两种方式来定位一个button,在使用index的时候,是根据class_name,即通过android.widget.Button这个class_name来找出当前界面中有几个button按钮(源码中通过elements = self._find_elements_by_class_name(class_name)来寻找有几个button按钮,就会返回几个element),然后每个 button按钮按照index的方式来取出(源码中通过element = elements[index]来得到具体的一个button按钮)。
AppiumLibrary库函数1:
def click_button(self, index_or_name):
""" Click button """
_platform_class_dict = {'ios': 'UIAButton',
'android': 'android.widget.Button'}
if self._is_support_platform(_platform_class_dict):
class_name = self._get_class(_platform_class_dict)
self._click_element_by_class_name(class_name, index_or_name)
AppiumLibrary库函数2:
def _click_element_by_class_name(self, class_name, index_or_name):
element = self._find_element_by_class_name(class_name, index_or_name)
self._info("Clicking element '%s'." % element.text)
try:
element.click()
except Exception as e:
raise 'Cannot click the %s element "%s"' % (class_name, index_or_name)
AppiumLibrary库函数3:
def _find_element_by_class_name(self, class_name, index_or_name):
elements = self._find_elements_by_class_name(class_name)
print 'elements:"%s"' % elements
if self._is_index(index_or_name):
try:
index = int(index_or_name.split('=')[-1])
print 'index:"%s"' % index
element = elements[index]
print 'element:' , element
except (IndexError, TypeError):
raise 'Cannot find the element with index "%s"' % index_or_name
else:
found = False
for element in elements:
self._info("'%s'." % element.text)
if element.text == index_or_name:
found = True
break
if not found:
raise 'Cannot find the element with name "%s"' % index_or_name
下面这个界面中,放入了两个button按钮,一个button按钮是计算按钮,一个button按钮是取消按钮。

在执行时,通过elements = self._find_elements_by_class_name(class_name)得到所有的button按钮后,再用print 'elements:"%s"' % elements可以打印出获取到的elements,也就是所有的button,从如下的输出结果可以看到,elements会存放在一个list列表中,该list 列表中,共有两个元素,代表取到了两个button按钮。
打印输出结果:
elements:"[<appium.webdriver.webelement.WebElement (session="8e85c12f-2243-4b82-abfc-d091fddbed8b", element="4")>, <appium.webdriver.webelement.WebElement (session="8e85c12f-2243-4b82-abfc-d091fddbed8b", element="5")>]"
当index 为0时,会取到第一个按钮,也就是“计算”这个button按钮,当index为1时,会取到第二个按钮,也就是“取消”这个button按钮。当index超过1后,那么就会报错啦,此时源码中会通过raise 'Cannot find the element with index "%s"' % index_or_name来抛出一个异常,告诉使用者,不能通过当前的index获取到element(也就是此时无法获取到任何button按钮啦)。
示例2:通过xpath的方式定位元素,这里依旧用上面的APP界面为示例。
用xpath的方式定位第一个EditText输入框和第二个EditText输入框,示例如下:
Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=22 deviceName=98YFBP522VSU app=C:/Users/yongqing/Desktop/app-debug.apk appPackage=com.example.calculator appActivity=MainActivity
Input Text xpath=//android.widget.EditText[1] 12
Input Text xpath=//android.widget.EditText[2] 14
Click Button 计算
执行结果:
Starting test: RobotFrameworkTest1.TestSuite5.TestCase005
20170510 13:45:07.381 : INFO : Typing text '12' into text field 'xpath=//android.widget.EditText[1]'
20170510 13:45:07.381 : INFO : msg:find xpath=//android.widget.EditText[1]
20170510 13:45:07.381 : INFO : prefix: xpath
20170510 13:45:07.397 : INFO : criteria: //android.widget.EditText[1]
20170510 13:45:10.462 : INFO : elements: [<appium.webdriver.webelement.WebElement (session="ec48b38a-9cbe-457d-94a0-dec662d3f9cb", element="1")>]
20170510 13:45:15.313 : INFO : Typing text '14' into text field 'xpath=//android.widget.EditText[2]'
20170510 13:45:15.313 : INFO : msg:find xpath=//android.widget.EditText[2]
20170510 13:45:15.313 : INFO : prefix: xpath
20170510 13:45:15.313 : INFO : criteria: //android.widget.EditText[2]
20170510 13:45:15.906 : INFO : elements: [<appium.webdriver.webelement.WebElement (session="ec48b38a-9cbe-457d-94a0-dec662d3f9cb", element="2")>]
20170510 13:45:21.307 : INFO : '计算'.
20170510 13:45:21.385 : INFO : Clicking element '计算'.
Ending test: RobotFrameworkTest1.TestSuite5.TestCase005
从上面的执行结果看,通过xpath=//android.widget.EditText[1] 定位到了第一个输入框,通过xpath=//android.widget.EditText[2] 定位到了第二个输入框。
示例3:通过accessibility_id的方式定位元素,accessibility_id对应到安卓APP后,其对应的属性为content-desc,这里依旧用上面的APP界面为示例,但是我们对第一个EditText输入框加入了content-desc属性,如下图所示。

Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=22 deviceName=98YFBP522VSU app=C:/Users/yongqing/Desktop/app-debug.apk appPackage=com.example.calculator appActivity=MainActivity
Input Text accessibility_id=输入框 23
Input Text id=com.example.calculator:id/factortwo 12
Click Button 计算
执行结果:
Starting test: RobotFrameworkTest1.TestSuite5.TestCase006
20170510 14:23:09.735 : INFO : Typing text '23' into text field 'accessibility_id=输入框'
20170510 14:23:09.735 : INFO : msg:find accessibility_id=输入框
20170510 14:23:16.573 : INFO : Typing text '12' into text field 'id=com.example.calculator:id/factortwo'
20170510 14:23:16.573 : INFO : msg:find id=com.example.calculator:id/factortwo
20170510 14:23:22.799 : INFO : '计算'.
20170510 14:23:22.901 : INFO : Clicking element '计算'.
Ending test: RobotFrameworkTest1.TestSuite5.TestCase006
从执行结果看,通过 accessibility_id=输入框 也可以定位到EditText输入框。
RobotFramework自动化测试框架-移动手机自动化测试Input Text和Click Button关键字的使用的更多相关文章
- RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary介绍
在使用AppiumLibrary库时,需要预先安装好Appium自动化工具,Appium官网地址为:http://appium.io/ Appium的GitHub地址为:https://github. ...
- RobotFramework自动化测试框架-移动手机自动化测试Clear Text关键字的使用
Clear Text关键字用来清除输入框的数据,该关键字接收一个参数[ locator ],这里的locator指的就是界面元素的定位方式. 示例1:Clear Text清除输入框数据时,采用reso ...
- RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary库其它的常见自动化关键字
关键字 使用描述 Close Application 关闭掉当前已经打开的APP Application,该关键字不需要接收任何的参数,但是使用该关键字的前提是已经打开了一个APP Applicati ...
- RobotFramework自动化测试框架-移动手机自动化测试Click Element关键字的使用
Click Element关键字用来模拟点击APP界面上的一个元素,该关键字接收一个参数[ locator ] ,这里的locator指的是界面元素的定位方式. 示例1:使用Click Element ...
- RobotFramework自动化测试框架-移动手机自动化测试Click A Point关键字的使用
Click A Point关键字用来模拟点击APP界面上的一个点,该关键字接收两个三个参数[ x=0 | y=0 | duration=100 ],x和y代表的是点的坐标位置,duration代表的是 ...
- RobotFramework自动化测试框架-移动手机自动化测试Click Element At Coordinates关键字的使用
Click Element At Coordinates关键字通过一个具体的坐标点,来模拟点击一个Element,该关键字接收两个参数[ coordinate_X | coordinate_Y ]. ...
- RobotFramework自动化测试框架-移动手机自动化测试Get Network Connection Status和Set Network Connection Status关键字的使用
Get Network Connection Status关键字用来获取手机的网络连接状态.在获取到连接状态后,会返回不同的数字. Set Network Connection Status关键字用来 ...
- RobotFramework自动化测试框架-移动手机自动化测试Open Application关键字的使用
在AppiumLibrary库中,Open Application关键字用来打开一个待测试移动APP. 示例1:连接本机已经打开的appium服务端,打开一个待测试的安卓APP,指定测试平台为Andr ...
- RobotFramework自动化测试框架-移动手机自动化测试Get Element Location关键字的使用
Get Element Location关键字用来获取一个Element的Location位置,该关键字接收一个参数[ locator ] 示例1:使用Get Element Location来获取一 ...
随机推荐
- H5投放在朋友圈广告做压力测试
一.环境 MacOS Sierra 二.背景 朋友圈广告投放的H5需要做ab压测,这里不赘述. 具体官方文档如下:http://ad.weixin.qq.com/learn/n10 三.正文 (1)别 ...
- 解决UIViewController中添加子控制器viewWillAppear不调用问题
问题描述: 我在UICollectionViewController中添加子控制器数组, 并在cellForItem中把子控制器数组中对应的控制器对应的view添加到了UICollectionView ...
- 【Spring】的【bean】管理(XML配置文件)
Bean实例化的三种方式 说明:通过配置文件创建对象就称为Bean实例化. 第一种:使用类的无参构造创建(重点) 实体类 package com.tyzr.ioc; public class User ...
- MVC5+EF6 完整教程17--升级到EFCore2.0
EF Core 2.0上周已经发布了,我们也升级到core 文章内容基于vs2017,请大家先安装好vs2017(15.3). 本篇文章主要讲下差异点,跟之前一样的就不再重复了. 文章目录(差异点): ...
- Python 一等函数
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 在 Python 中,函数是一等对象.编程语言理论家把"一等 ...
- Orleans---持久化
Orleans配置---持久化 这是Orleans系列文章中的一篇.首篇文章在此 Grain理想的生命周期应该如下图所示: 这就如美国电影中的大反派一样,死了再复活,死了再复活.当然如果复活的反派没有 ...
- koa2 controller中实现类似sleep的延迟功能
今天有同事问我如何在koa2中的controller中使用延迟执行的功能,他直接在controller中使用setTimeout,但是没效果. 错误的代码类似下面这样: // 错误的方法 export ...
- js把星期由数字转换为星期名称
//由星期的数字转换为星期的名称,date格式:2016-01-07,用"-"分割 function toWeekName(date) { var newDate = new Da ...
- LAMP环境的搭建(一)----Apache安装
centos是Linux发行版RedHat的一个分支,因此可以很方便的使用yum安装并管理各种软件包. 本文使用的系统环境为:阿里云Centos7.2. Apache的安装: 输入命令: yum –y ...
- 【踩坑】activiti工作流的svg-xml解析报错
1.问题记录 工作流配置画模板的时候保存成功但是部署报错. IE下 activiti工作流解析xml报错 type "path" must be followed by eithe ...