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导入txt数据到mysql的方法
Apr 08 Python
在Python的Flask框架下收发电子邮件的教程
Apr 21 Python
搞笑的程序猿:看看你是哪种Python程序员
Jun 12 Python
实例讲解Python爬取网页数据
Jul 08 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
python求质数的3种方法
Sep 28 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
Jan 19 Python
tensorflow对图像进行拼接的例子
Feb 05 Python
Python编程快速上手——正则表达式查找功能案例分析
Feb 28 Python
如何基于Python爬取隐秘的角落评论
Jul 02 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
详谈PHP编码转换问题
2015/07/28 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
Javascript 中介者模式实例
2009/12/16 Javascript
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
从零学python系列之从文件读取和保存数据
2014/05/23 Python
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
Python实现简单的语音识别系统
2017/12/13 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
超市总经理岗位职责
2014/02/02 职场文书
工程专业应届生求职信
2014/02/19 职场文书
逃课上网检讨书
2014/02/20 职场文书
党员承诺书内容
2014/03/26 职场文书
争先创优公开承诺书
2014/08/30 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
坎儿井导游词
2015/02/09 职场文书
对领导班子的意见和建议
2015/06/08 职场文书