Android自动化测试23

转帖请注明出处!谢谢

Appium同步点

在自动化测试过程中,需要解决测试脚本执行速度和被测试软件执行速度相匹配的问题,可以用同步点来解决。同步点是自动化测试工具中的一个术语,它是指在一个测试过程中,指示测试脚本等待应用程序中某个特定过程运行完成以后再运行下一步操作。

测试过程中,如果需要指定测试工具暂停运行一个测试或组件,直到特定的对象属性存在后才开始运行下一步,那么可以插入同步点来实现。例如判断进度条是否已经100%完成;判断某一状态消息的出现;等待某按钮状态变为可用。在Appium中提供了强制等待,隐性等待,显性等待来充当同步点,解决测试脚本执行中的同步问题:

  1. sleep

Sleep是最简单粗暴的一种解决方法,也就是强制等待,也就是在要对移动应用中的控件或者web页面中的元素做动作前,设置固定休眠时间,sleep特定秒数。

下例测试计算器代码:

#coding:utf-8
import time
from appium import webdriver
from appium.webdriver.connectiontype import ConnectionTypedesired_caps = {}
desired_caps['platformName'] = 'Android'  # 设备系统
desired_caps['platformVersion'] = '6.0'  # 设备系统版本
desired_caps['deviceName'] = 'emulator-5554'  #  设备名称
desired_caps['appPackage'] = 'com.android.calculator2'
desired_caps['appActivity'] = '.Calculator'
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
time.sleep(3)
sleep(20)  # 强制等待20秒再执行下一步
#操作代码
driver.quit()

代码中sleep(20)就是强制等待20秒,测试代码不管浏览器是否加载完了,都得等待20秒,20秒一到,继续执行下面的代码,这种做法作为调试很有用,实际项目中不建议用这种等待方式,严重影响程序执行速度。

  1. Implicit Wait

Implicit Wait称之为隐式等待,它是webdirver 提供的一个超时等待,影响是全局的。等待一个元素被发现,或一个命令完成,如果超出了设置时间的则抛出异常。这种方式是比较简便的方式,设定程序预设等待的时间,

代码:

#coding:utf-8
import time
from appium import webdriver
from appium.webdriver.connectiontype import ConnectionTypedesired_caps = {}
desired_caps['platformName'] = 'Android'  # 设备系统
desired_caps['platformVersion'] = '6.0'  # 设备系统版本
desired_caps['deviceName'] = 'emulator-5554'  #  设备名称
desired_caps['appPackage'] = 'com.android.calculator2'
desired_caps['appActivity'] = '.Calculator'
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
driver.implicitly_wait(5) # 秒
#操作代码
driver.quit()

预设等待5秒,如果该后续操作中遇到控件超过5秒之后才出现,会报Exception错误。

implicitly_wait方法比 sleep更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。使用implicitly_wait的有缺点:

优点:

  • 开发脚本成本低:只要在测试执行开始声明一次 timeout时间,所有的脚本都可以起作用。

缺点:

  • 无法快速定位错误:Implicit Wait 是由 selenium remote 端操控,而错误讯息由 OS, 浏览器 与Selenium 的版本决定,这会导致使用 implicit wait 时,结果可能无法预期。
  • 在Web测试中仅限使用在find elements:Implicit Wait仅在find_element时检查元素是否存在于DOM (Document Object Model) 中,若是要进一步检查元件的属性是否 clickable, visible等,则无法完成。
  • 无法为特定的控件对象定制化等待时间:由于timeout 时间统一都为n 秒,为了某些控件需要特别长的等待时间,Implicit Wait 的timeout 可能因此被设定的很长。
  1. WebDriverWait()

显示等待:就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception。

利用Selenium所提供的功能,对于特定的控件针对特定条件做等待。在设置时间内,默认每隔一段时间检测一次控件是否存在,如果超过设置时间检测不到则抛出异常。

WebDriverWai一般由until或until_not方法配合使用,就能够根据判断条件而进行灵活地等待了。

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import Bydriver = webdriver.Firefox()
driver.implicitly_wait(10)  # 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者
driver.get('https://www.sina.com')
locator = (By.LINK_TEXT, '微博')try:WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))print(driver.find_element_by_link_text('微博').get_attribute('href') )
finally:driver.close()

上例中设置了隐性等待和显性等待,在其他操作中,隐性等待起决定性作用,在WebDriverWait中显性等待起主要作用,但要注意的是:最长的等待时间取决于两者之间的大者,此例中为20,如果隐性等待时间 > 显性等待时间,则该句代码的最长等待时间等于隐性等待时间。

android 图片浏览控件_Android自动化测试23--Appium同步点相关推荐

  1. 原创“.NET研究”企业级控件库之图片浏览控件

    在上两篇:我介绍了原创企业级控件库之组合查询控件 和原创企业级控件库之大数据量分页控件,受到了很多朋友的支持,给了我很大的动力,在此我特表感谢.有的朋友要求把源码提供上来,我在第一篇就讲了,源码会在我 ...

  2. android 原理 组合控件_Android自定义控件进阶01-自定义控件开发套路与流程

    Android自定义控件进阶01-自定义控件开发套路与流程本章节为什么要叫进阶篇?(虽然讲的是基础内容),因为从本篇开始,将会逐渐揭开自定义View的神秘面纱,每一篇都将比上一篇内容更加深入,利用所学 ...

  3. android勾选控件_Android中CheckBox复选框控件使用方法详解

    CheckBox复选框控件使用方法,具体内容如下 一.简介 1. 2.类结构图 二.CheckBox复选框控件使用方法 这里是使用java代码在LinearLayout里面添加控件 1.新建Linea ...

  4. 一个很炫的图片/相册浏览控件(Flex实现)

    有段时间为了做个事情,需求大概这样:有几组照片集(或者叫相册)需要在软件中就行快速浏览,效果类似于Windows操作系统中的照片查看器,既可以缩略图看,也可以逐个放大看,也可以幻灯片形式放映.要求Wi ...

  5. Android学习笔记26:图片切换控件ImageSwitcher的使用

    在Windows操作系统中,要查看多张图片,可以通过使用"Windows照片查看器"在"上一张"和"下一张"之间切换,进行多张图片的浏览. ...

  6. Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来

    转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/8769904 首先题外话,今天早上起床的时候,手滑一下把我的手机甩了出去,结果陪伴我 ...

  7. Android微信九宫格图片展示控件

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/214 Android微信九宫格图片展示控件 半年前,公司产 ...

  8. Android如何设置按钮图片(控件图片)大小自适应

    Android如何设置按钮图片(控件图片)大小自适应 在你的button中放入图片:drawble属性,你可以选择它的位置上下左右, 如何让图片自适应? 把图片放入res-drawable-mipma ...

  9. android从九宫格全屏预览,仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图...

    AssNineGridView 仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图(可自定义). 写在前面 这是一个九宫格控件,本来是很久之前就写好了,现在才开源出来,也是看了很多优秀 ...

最新文章

  1. Kubernetes 集群无损升级实践
  2. phxpaxos编译示例
  3. 史上最全的CSS hack方式一览(转)
  4. python之路-双下方法
  5. Optaplanner规划引擎的工作原理及简单示例(1)
  6. 播客#50:Sacha Greif
  7. 【Elasticsearch】Elasticsearch:aggregation介绍
  8. 福州大学 Problem 2169 shadow
  9. materialize框架select使用JavaScript添加option注意事项
  10. 2022年公司企业邮箱大全
  11. 硬件电路设计之与非门触发器74HC30和74HCT20
  12. 【微弱瞬态信号检测】混沌背景下微弱瞬态信号的SVM检测方法的matlab仿真
  13. android 水波纹进度,Android自定义View-水波纹progressbar
  14. continue语句只用于循环语句中_Python尚学堂高淇|P60P63break语句,else语句使用,循环代码的优化...
  15. EXT4 之 Android 文件系统剖析
  16. telnet协议的Wireshark抓包分析
  17. i5十代不能装win7系统_i5处理器是装Windows7还是Windows10系统?
  18. 如何提取微信公众号文章里边的视频地址
  19. npp各个平台npp数据比较
  20. 高中职业学院计算机一级考试试题题库,计算机一级ms office考试题库

热门文章

  1. Cloudera Manager是什么?
  2. Storm 01_初识初知
  3. Hadoop 04_Hadoop2.0
  4. springboot的核心
  5. gradle中的build script详解
  6. 如何在Spring boot中修改默认端口
  7. CentOS 6 安装Hadoop 2.6 (三)问题收集
  8. Leet Code OJ 237. Delete Node in a Linked List [Difficulty: Easy]
  9. python输入hello输出olleh_leetcode上的python练习(6)
  10. android 禁用dlsym_Android7.0对dlopen的改变——读取私有.so结果变化