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  __getattr__与__setattr__使用方法
Sep 06 Python
python中去空格函数的用法
Aug 21 Python
学习python之编写简单乘法口诀表实现代码
Feb 27 Python
python编程实现归并排序
Apr 14 Python
Django实现组合搜索的方法示例
Jan 23 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
python+pyqt5实现图片批量缩放工具
Mar 18 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
Python实现word2Vec model过程解析
Dec 16 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
python3.7添加dlib模块的方法
Jul 01 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 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
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
深入PHP FTP类的详解
2013/06/13 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
jquery ajax执行后台方法
2010/03/18 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
python实现问号表达式(?)的方法
2013/11/27 Python
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
Python中线程编程之threading模块的使用详解
2015/06/23 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
python爬虫实例详解
2018/06/19 Python
Python实现的json文件读取及中文乱码显示问题解决方法
2018/08/06 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
JAVA程序员面试题
2012/10/03 面试题
企业门卫岗位职责
2013/12/12 职场文书
小学生秋游活动方案
2014/02/23 职场文书
大学新闻系求职信
2014/06/03 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
群众路线调研报告范文
2014/11/03 职场文书
优秀班组申报材料
2014/12/25 职场文书
公务员年终个人总结
2015/02/12 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
初中英语教学随笔
2015/08/15 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers