自动化测试之路 —— Appium输入及模拟手势

747

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

   

在这里插入图片描述

   

1.目的

  当今社会,人们的生活几乎已经无法离开各种各样的APP了,它提供给我们的便利与服务意义远远超出了其本身的软件价值。作为测试来说移动应用也早已是各大互联网公司的拳头产品,其本身的开发周期短,附属产品价值高等特性决定了今后的主导地位。

  那么在日常的测试活动中,移动应用的质量保障就成为了各个测试团队的主要课题,面对高速迭代的功能、日益缩短的项目周期、逐渐庞大的人力与资源投入,以上的这些因素都会让测试团队不得不在项目中加入自动化测试策略。

  Appium作为一个自动化移动应用测试框架来说,就可以很好的满足大部分移动应用测试的需求。作为当今仍然主流的自动化测试框架,各位测试同学要熟练的使用也就成为大家日常的基本内容之一。

   

2.说明

1.此笔记中所使用的操作系统为Win 10,笔记中所涉及的软件版本有可能会因为时间的推移而导致不匹配或其他额外的操作,请大家有针对性的选择阅读与参考。

2.这里因操作系统关系,只针对安卓与鸿蒙OS来进行教程讲解,后续会推出iOS的相关Appium安装与配置、日常使用教程。

3.本文是使用Python语言配合Appium进行讲解,其他语言相关教程不在此做赘述。

   

3.接上回

  前一篇我们已经熟悉了各种关于元素的定位方法,也基本掌握的各种方法的实际使用场景。既然是移动设备,就必定会有相关的键盘与屏幕操作,那接下去就为大家介绍这些相关的操作。

   

4.键盘操作

 

4.1 模拟输入

在APP中一般都会存在信息输入或交互框这类控件,如果需要往其中输入对应的测试数据,就需要用到send_keys()函数。

实现方法:

driver.find_element(AppiumBy.ID, 'com.jiyong.rta.debug:id/edt_customer_number').send_keys('00127')

 

如果要在控件中输入中文的话,则需要在Desired Capabilities中加入'unicodeKeyboard': True'resetKeyboard': True这两项参数;它们分别代表可以以unicode编码格式进行输入、初始化键盘状态。

   

4.2 模拟按键

另一种则是需要通过真实的按键或手机虚拟键盘进行输入框或交互框的测试数据输入,我们可以使用扩展方法pressKeyCode(),注意此函数只适用于Android。

实现方法:

driver.press_keycode(7)

 

与send_keys()不同,在使用模拟按键时,需要先将焦点放置于所需要交互的控件上。

driver.find_element(AppiumBy.ID, 'com.jiyong.rta.debug:id/edt_customer_number').click()

   

这里区分为两种键盘,一种是模拟手机的物理按键(菜单、Home、返回等),另一种是模拟键盘按键。分别对应driver.keyevent()driver.press_keycode()两种函数。

 

如果要使用对应的按键只需要在方法内填入相应的参数即可。  

物理按键

在这里插入图片描述  

另外需要模拟长按某些物理按键的话(长按电源、长按音量),就可以使用long_press_keycode()函数来进行操作。

   

控制按键  

在这里插入图片描述

   

基本按键  

在这里插入图片描述

   

5.模拟触控

 

5.1 模拟点击

除了click()以外,我们还可以使用tap()对一个元素或特定坐标进行点击操作。

 

实现方法:

driver.tap([(100, 200)], 500)

这里是根据屏幕的坐标来进行点击动作的,坐标用元组表示并且最多可以有5组这样的坐标,分别代表五个触点,最外部用列表来进行表示。列表后面的数字代表操作停留的时间,以毫秒为单位。另外由于这个方法使用坐标来进行操作,各类手机的屏幕大小又有所不同,坐标常常会发生偏移,导致定位失败,所以不推荐使用。

   

5.2 模拟按压

使用press()函数可以模拟手指在特定控件或区域进行按压的动作

 

实现方法:

使用前需要导入appium.webdriver.common.touch_action下的TouchAction包

t_driver.press(x=120, y=120).wait(1000).release()

以上代码相当于模拟按住指定坐标的元素后停顿1秒再放开的操作 另外这里依旧不推荐使用坐标来进行操作,如果可以定位元素的话就最好了。

element = driver.find_element(AppiumBy.ID, 'com.jiyong.rta.debug:id/edt_customer_number')
t_driver.press(element).wait(500).release()

   

另外还有wait(),move_to()等函数,顾名思义,都是一些基础模拟操作方法。 通过以上的实践,我们可以通过更多的函数组合出自己想要的测试步骤和动作,比如:

在这里插入图片描述

 

我们就可以使用图像验证识别+手势操作,进行图片识别验证操作。

t_driver.press(x=120, y=120).wait(2000).move_to(x=350, y=120).release()

这里需要注意的是如果多次使用move_to()函数,则要对应识别前一次操作的相对坐标而不是画面的绝对坐标。

   

5.2 模拟长按

与wait()不同的,appium还提供了long_press()函数。

 

实现方法:

element = driver.find_element(AppiumBy.ID, 'com.jiyong.rta.debug:id/edt_customer_number')
t_driver.long_press(element, duration=3000)

duration是长按的持续时间,默认为1000毫秒

   

6.注意点

1.做图像验证的长按拖拽时,如果上列的方法无法实现的话,可以尝试将press()替换为long_press()方法;

2.一般来说验证码滑块不需要切换frame(switch_to.frame),即使他是webview页面;

3.如果报错“AttributeError: 'WebDriver' object has no attribute”的情况,检查一下是否同时导入了Appium和Selenium下的webdriver,并且确保Appium的顺序要在Selenium之下。

   

以上就是appium提供的一些基础的模拟操作方法,我们日常还是需要多多的进行方法实践,来组合出最适合自己公司产品的测试脚本。