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开发如何在ubuntu 15.10 上配置vim
Jan 25 Python
python八大排序算法速度实例对比
Dec 06 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
浅谈python3发送post请求参数为空的情况
Dec 28 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
Python对象的属性访问过程详解
Mar 05 Python
django实现日志按日期分割
May 21 Python
keras 多任务多loss实例
Jun 22 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
使用Django的JsonResponse返回数据的实现
Jan 15 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 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
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
javascript event 事件解析
2011/01/31 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
python网络编程示例(客户端与服务端)
2014/04/24 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Django密码系统实现过程详解
2019/07/19 Python
python和go语言的区别是什么
2020/07/20 Python
html5与css3小应用
2013/04/03 HTML / CSS
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
工作自我评价怎么写
2014/01/29 职场文书
给面试官的感谢信
2014/02/01 职场文书
个人承诺书
2014/03/26 职场文书
《凡卡》教学反思
2014/04/09 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
副总经理岗位职责
2015/02/02 职场文书
护士自荐信范文
2015/03/25 职场文书
运动会加油稿
2015/07/22 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
python 如何用map()函数创建多线程任务
2021/04/07 Python
Python软件包安装的三种常见方法
2022/07/07 Python