Python实现元素等待代码实例


Posted in Python onNovember 11, 2019

这篇文章主要介绍了python实现元素等待代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、为什么要元素等待?

在UI自动化过程中,元素的出现受网络环境、设备性能等多种元素影响。因此,元素加载和脚本运行到该元素的时间不一致,会报错:元素无法定位。

简单举下例子:实际UI自动化测试中,点击一个登录控件需要启动一个新activity界面,或需要加载弹框,或请求网络加载数据成功后刷新页面,此时需要等待一段时间,新界面出现了才能继续执行UI操作,否则数据还在加载ing,脚本已开始执行新界面操作的代码,脚本就会报错。

二、元素等待的作用

  • 设置元素等待,增强脚本的健壮性,提高执行效率;
  • 本质是为了解决时序不匹配:脚本执行时,脚本的执行速度和页面元素的加载速度未必一致

三、元素等待类型

  • 强制等待:死等待,设置固定的等待时间 -- sleep(2) # 强制等待5s,要导入时间包(import time)
  • 隐性等待:针对全度元素设置的等待时间 -- driver.implicitly_wait(5)
  • 显性等待:针对某个元素来设置的等待时间 -- WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exception=None),要导入包(from selenium.webdriver.support.ui import WebDriverWait)

四、怎么设置元素等待

1.强制等待的应用实例:

from appium import webdriver
import time
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1.1'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['packageName'] = 'com.cnblogs.android'
desired_caps['packagActivity'] = 'com.cnblogs.android.SplashActivity'
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
driver = webdriver.Remote('http://127.0.0.1:8888/wd/hub',desired_caps)
# 强制等待5s,不管等待的元素是否出现,都要等5s
time.sleep(5)
driver.find_element_by_id('com.cnblogs.android:id/TabSearch').click()
time.sleep(2)
driver.find_element_by_id('com.cnblogs.android:id/txtSearch').send_keys('方缘')
driver.find_element_by_id('com.cnblogs.android:id/search_btn').click()
driver.quit()

2.隐性等待:

from appium import webdriver
import time
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1.1'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['packageName'] = 'com.cnblogs.android'
desired_caps['packagActivity'] = 'com.cnblogs.android.SplashActivity'
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
driver = webdriver.Remote('http://127.0.0.1:8888/wd/hub',desired_caps)
# 隐性等待(等待所有元素),最长3s
driver.implicitly_wait(3)
driver.find_element_by_id('com.cnblogs.android:id/TabSearch').click()
time.sleep(2)
driver.find_element_by_id('com.cnblogs.android:id/txtSearch').send_keys('方缘')
driver.find_element_by_id('com.cnblogs.android:id/search_btn').click()
driver.quit()

3.显性等待:

from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1.1'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['packageName'] = 'com.cnblogs.android'
desired_caps['packagActivity'] = 'com.cnblogs.android.SplashActivity'
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
driver = webdriver.Remote('http://127.0.0.1:8888/wd/hub',desired_caps)
# 显性等待(等待特定元素出现)
# lambda 提供了一个运行时动态创建函数的方法。
WebDriverWait(driver,3).until(lambda x: x.find_element_by_id('com.cnblogs.android:id/TabSearch')).click()
driver.find_element_by_id('com.cnblogs.android:id/TabSearch').click()
time.sleep(2)
driver.find_element_by_id('com.cnblogs.android:id/txtSearch').send_keys('方缘')
driver.find_element_by_id('com.cnblogs.android:id/search_btn').click()
driver.quit()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python绘图库Matplotlib的安装
Jul 03 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
Python JSON格式数据的提取和保存的实现
Mar 22 Python
python读文件的步骤
Oct 08 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
使用python创建Excel工作簿及工作表过程图解
May 27 Python
python使用布隆过滤器的实现示例
Aug 20 Python
什么是Python包的循环导入
Sep 08 Python
如何使用Django Admin管理后台导入CSV
Nov 06 Python
python爬虫爬取某网站视频的示例代码
Feb 20 Python
Python爬虫基础之爬虫的分类知识总结
May 13 Python
如何在Python中妥善使用进度条详解
Apr 05 Python
如何基于python生成list的所有的子集
Nov 11 #Python
使用django和vue进行数据交互的方法步骤
Nov 11 #Python
如何使用python进行pdf文件分割
Nov 11 #Python
python实发邮件实例详解
Nov 11 #Python
Python 中 -m 的典型用法、原理解析与发展演变
Nov 11 #Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 #Python
Python帮你识破双11的套路
Nov 11 #Python
You might like
域名和cookie问题(域名后缀)
2012/10/10 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
Javascript 类型转换方法
2010/10/24 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
Python中的ceil()方法使用教程
2015/05/14 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
Python正则表达式常用函数总结
2017/06/24 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
Python并行分布式框架Celery详解
2018/10/15 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
GAP美国官网:美国休闲时尚品牌
2016/08/26 全球购物
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
通信工程专业毕业生推荐信
2013/12/25 职场文书
会议接待欢迎词
2014/01/12 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
德劲DE1108畅想
2021/04/22 无线电