Appium核心应用(三)
作者:reader1   类别:Java开发    日期:2019-12-20 11:54:57    阅读:279 次   消耗积分:0 分

本周分享《Appium核心应用》实验中的原生应用测试

回顾上周内容,请点击

教材连载:Appium核心应用(一)

教材连载:Appium核心应用(二)



“一笔记账”是一个原生的Android应用程序,所以本节内容将主要为大家演示如何利用Appium对该原生应用程序进行自动化测试。基本测试步骤如下:

(1)设计测试用例,明确测试点和操作步骤。

(2)利用UI Automator Viewer识别对应的元素属性。

(3)开发Appium脚本,并完成对用例的断言。

(4)调试脚本,确保流畅运行,并达到自动化测试目的。


由于本节内容重点在于对象识别和测试脚本开发,所以我们先来完成一个相对简单的测试流程,将重心放在Appium测试脚本的开发中。主要针对“一笔记账”完成一个记账操作,主要操作界面有以下两个,如下图所示。


1.png



根据上图所示的操作步骤,现在使用UI Automator Viewer工具来完成对象属性的识别。首先来看看第一屏的“账目列表”和“记一笔”两个对象的属性情况。



2.png


通过上图的属性识别后,我们首先需要来规划对象识别的操作方案,因为再好的自动化测试,如果没有办法准确地找到我们需要的元素,将变得毫无意义。


(1)账目列表有多行,每一行主要由两个内容构成:账目备注和所花费用。而账目备注的resource-id属性值为“com.mobivans.onestrokecharge:id/account_item_txt_remark”,所花费用的resource-id属性值为“com.mobivans.onestrokecharge:id/account_item_txt_money”。这本身没有问题,使用ID属性定位元素是最高效的做法,但是现在的问题是账目列表中的每一行元素,都是这两个相同的resource-id属性,那么,我们使用driver.find_element_by_id方法就无法精确定位到我们需要找的那一行。这种情况下该怎么处理呢?既然元素有resource-id属性,且有多个元素具备相同的resource-id属性,那么我们可以使用driver.find_elements_by_id复数形式的方法来获取所有相同ID属性的元素,然后遍历这些元素,再利用元素的get_attribute(“text”)方法或者.text属性获取到对应的text属性值,进而判断该值是否与我们输入的值一致,进而达到断言的目的。


(2)对于按钮“记一笔”来说,这是我们完成核心操作的第一步,必须准确定位到该元素上。通过UI Automater Viewer的识别我们可以看到,该添加按钮是一个图标带文本的按钮,即我们可以操作图标完成添加,也可以直接点击正文文本完成添加。但是这个图文按钮都没有resource-id属性。这种情况下又该如何处理呢?我们可以通过两种方案来解决。一是该图文按钮的上一层是一个LinearLayout的布局对象,并且具备resource-id属性“com.mobivans.onestrokecharge:id/main_write1”,该元素是图文按钮的父元素,我们通过先寻找到其父元素,再寻找子元素的方式,利用XPath定位即可找到。另外一种方式是直接利用文本按钮的text属性,使用driver.find_element_by_name方法查找到该元素,完成操作。

 

当完成了第一屏的元素分析后,我们继续来完成第二屏的元素分析。在第二屏中的元素,除了选择支出类型的地方使用的是图文按钮外,其它元素都有对应的resource-id属性,现列举如下:


(1)按钮“支出”,resource-id为“com.mobivans.onestrokecharge:id/add_txt_Pay”,text为“支出”。


(2)按钮“书籍“,resource-id为“com.mobivans.onestrokecharge:id/item_cate_image”,但是所有类别的resource-id均为相同属性,所以不可用,退而求其次,使用正文文本按钮,利用driver.find_element_by_name方法查找其text属性即可。


(3)文本框“备注”,resource-id为“com.mobivans.onestrokecharge:id/add_et_remark”,唯一识别。


(4)下方数据按钮,每一个按钮对应一个resource-id属性,且唯一识别。


(5)按钮“完成”,resource-id为“com.mobivans.onestrokecharge:id/keyb_btn_finish”,唯一识别。

 

对上述界面元素进行分析和找到定位方案后,接下来完成以下测试脚本的开发。


from appium   import webdriver

from time import   sleep

from   selenium.webdriver.common.action_chains import ActionChains

import os

app_path = os.path.abspath('.')   + '\\yibijizhang.apk'  # 定义apk文件

 

desired_caps =   {}       # 定义webdriver的兼容性设置字典对象

desired_caps['platformName']   = 'Android'    # 指定测试Android平台

版权所有,转载本站文章请注明出处:蜗牛笔记, http://www.woniunote.com/article/120
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}