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判断变量是否已经定义的方法
Aug 18 Python
修改Python的pyxmpp2中的主循环使其提高性能
Apr 24 Python
Python实现简单截取中文字符串的方法
Jun 15 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 Python
Python内置模块logging用法实例分析
Feb 12 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
Mar 15 Python
pyqt5之将textBrowser的内容写入txt文档的方法
Jun 21 Python
PyTorch的深度学习入门之PyTorch安装和配置
Jun 27 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
Python json格式化打印实现过程解析
Jul 21 Python
在 Python 中使用 MQTT的方法
Aug 18 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 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
用PHP实现WEB动态网页静态
2006/10/09 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
python面试题小结附答案实例代码
2019/04/11 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
Django设置Postgresql的操作
2020/05/14 Python
浙大网新C/C++面试解惑
2015/05/27 面试题
化学学院毕业生自荐信范文
2013/12/17 职场文书
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
纺织工程专业个人求职信范文
2014/01/27 职场文书
申论倡议书范文
2014/05/13 职场文书
班训口号大全
2014/06/18 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
学习雷锋主题班会
2015/08/14 职场文书
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers
Docker官方工具docker-registry案例演示
2022/04/13 Servers