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关键字的使用的更多相关文章

  1. RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary介绍

    在使用AppiumLibrary库时,需要预先安装好Appium自动化工具,Appium官网地址为:http://appium.io/ Appium的GitHub地址为:https://github. ...

  2. RobotFramework自动化测试框架-移动手机自动化测试Clear Text关键字的使用

    Clear Text关键字用来清除输入框的数据,该关键字接收一个参数[ locator ],这里的locator指的就是界面元素的定位方式. 示例1:Clear Text清除输入框数据时,采用reso ...

  3. RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary库其它的常见自动化关键字

    关键字 使用描述 Close Application 关闭掉当前已经打开的APP Application,该关键字不需要接收任何的参数,但是使用该关键字的前提是已经打开了一个APP Applicati ...

  4. RobotFramework自动化测试框架-移动手机自动化测试Click Element关键字的使用

    Click Element关键字用来模拟点击APP界面上的一个元素,该关键字接收一个参数[ locator ] ,这里的locator指的是界面元素的定位方式. 示例1:使用Click Element ...

  5. RobotFramework自动化测试框架-移动手机自动化测试Click A Point关键字的使用

    Click A Point关键字用来模拟点击APP界面上的一个点,该关键字接收两个三个参数[ x=0 | y=0 | duration=100 ],x和y代表的是点的坐标位置,duration代表的是 ...

  6. RobotFramework自动化测试框架-移动手机自动化测试Click Element At Coordinates关键字的使用

    Click Element At Coordinates关键字通过一个具体的坐标点,来模拟点击一个Element,该关键字接收两个参数[ coordinate_X | coordinate_Y ]. ...

  7. RobotFramework自动化测试框架-移动手机自动化测试Get Network Connection Status和Set Network Connection Status关键字的使用

    Get Network Connection Status关键字用来获取手机的网络连接状态.在获取到连接状态后,会返回不同的数字. Set Network Connection Status关键字用来 ...

  8. RobotFramework自动化测试框架-移动手机自动化测试Open Application关键字的使用

    在AppiumLibrary库中,Open Application关键字用来打开一个待测试移动APP. 示例1:连接本机已经打开的appium服务端,打开一个待测试的安卓APP,指定测试平台为Andr ...

  9. RobotFramework自动化测试框架-移动手机自动化测试Get Element Location关键字的使用

    Get Element Location关键字用来获取一个Element的Location位置,该关键字接收一个参数[ locator ] 示例1:使用Get Element Location来获取一 ...

随机推荐

  1. git分支管理之Feature分支

    软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合 ...

  2. Appium环境搭建(Windows版)

    Appium介绍 Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持iOS.Android及FirefoxOS平台.Appium使用WebDriver的js ...

  3. 【原创】IE8升级到IE11控制台报错的解决方案

    公司win7 64位 英文版系统,刚从IE8升级到IE11,在我F12准备调试js的时候,竟然发现控制台报错了!天啦撸,顿时慌了有木有! 网上搜索了半天,解决方案如下: http://www.micr ...

  4. Linux - 简明Shell编程08 - 函数(Function)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash function Check( ...

  5. 1.three.js世界的4大要素

    一.三大组件 在Three.js中,要渲染物体到网页中,我们需要3个组建:场景(scene).相机(camera)和渲染器(renderer).有了这三样东西,才能将物体渲染到网页中去. 记住关建语句 ...

  6. [C#] out vs ref

    当需要从一个方法中有多个返回值时可以考虑使用out和ref这两个关键字.下面通过代码的方式来说明两者的用法和不同之处. 例如现在有一个如下的Add方法,Add方法只有一个返回值. static int ...

  7. asp.net 开发 sql server 转 oracle

    前段时间我们公司项目 要把sql server 转oracle 分享一下心得 也记录一下问题 开始我研究了一段时间 然后下载了 oracle 11g 版本 和 PL/SQL(客户端) 和sql ser ...

  8. select、poll、epoll简介

    epoll跟select都能提供多路I/O复用的解决方案.在现在的Linux内核里有都能够支持,其中epoll是Linux所特有,而select则应该是POSIX所规定,一般操作系统均有实现 sele ...

  9. RQNOJ 201 奥运大包围:LIS + 拼链成环

    题目链接:https://www.rqnoj.cn/problem/201 题意: 开始时n(n<=1000)个人手拉手围成一个圈. 后来这些人中的一些按顺序向里面出圈形成一个新圈.从而使原圈形 ...

  10. JS基础属性跟运算

    小编这周学了JS函数基础知识跟运算!!下面就迫不及待跟大家分享一下 [switch case的结构写法] 结构写法:(略) 2注意事项: ①switch结构()中的表达式.可以使用各种js支持的数据类 ...