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中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
Python生成不重复随机值的方法
May 11 Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
Apr 06 Python
Python实现聊天机器人的示例代码
Jul 09 Python
python+splinter实现12306网站刷票并自动购票流程
Sep 25 Python
python中p-value的实现方式
Dec 16 Python
python @propert装饰器使用方法原理解析
Dec 25 Python
Python常用模块函数代码汇总解析
Aug 31 Python
python RSA加密的示例
Dec 09 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 Python
python数字图像处理实现图像的形变与缩放
Jun 28 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教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
jquery中的on方法使用介绍
2013/12/29 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
Python3+Selenium+Chrome实现自动填写WPS表单
2020/02/12 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
django 模型字段设置默认值代码
2020/07/15 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
户外亲子活动策划方案
2014/02/07 职场文书
优质服务活动实施方案
2014/05/02 职场文书
捐助感谢信
2015/01/22 职场文书
化妆品促销活动总结
2015/05/07 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
解析目标检测之IoU
2021/06/26 Python
MySQL之select、distinct、limit的使用
2021/11/11 MySQL