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的Twisted框架中reactor事件管理器的用法
May 25 Python
python中的格式化输出用法总结
Jul 28 Python
python timestamp和datetime之间转换详解
Dec 11 Python
Python实现批量压缩图片
Jan 25 Python
Python中的pack和unpack的使用
Mar 12 Python
基于python的图片修复程序(实现水印去除)
Jun 04 Python
python生成n个元素的全组合方法
Nov 13 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
使用pandas读取文件的实现
Jul 31 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
Python脚本调试工具安装过程
Jan 11 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
用ADODB.Stream转换
2007/01/22 Javascript
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
Python 3中的yield from语法详解
2017/01/18 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
浅析matlab中imadjust函数
2020/02/27 Python
Python timeit模块原理及使用方法
2020/10/10 Python
初中三年学生的学习自我评价
2013/11/13 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
采购内勤岗位职责
2015/04/13 职场文书
2015年教师学期工作总结
2015/04/30 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
frg-100简单操作(设置)说明
2022/04/05 无线电
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技
速龙x4-860k处理器相当于i几
2022/04/20 数码科技