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 相关文章推荐
C#返回当前系统所有可用驱动器符号的方法
Apr 18 Python
Python 专题四 文件基础知识
Mar 20 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
python实现超简单的视频对象提取功能
Jun 04 Python
django 实现电子支付功能的示例代码
Jul 25 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
通过python将大量文件按修改时间分类的方法
Oct 17 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
matplotlib部件之套索Lasso的使用
Feb 24 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 上传文件大小限制
2009/07/05 PHP
php中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
php cli换行示例
2014/04/22 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
javascript如何定义对象数组
2016/06/07 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
python调用新浪微博API项目实践
2014/07/28 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
python实现图片素描效果
2020/09/26 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
Python是如何进行类型转换的
2013/06/09 面试题
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
协议书模板
2014/04/23 职场文书
单位考核鉴定意见
2015/06/05 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
高中同学会致辞
2015/08/01 职场文书
月考总结与反思
2015/10/22 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers