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 随机数生成的代码的详细分析
May 15 Python
Python中实现参数类型检查的简单方法
Apr 21 Python
python类:class创建、数据方法属性及访问控制详解
Jul 25 Python
Python中断言Assertion的一些改进方案
Oct 27 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
Python发送邮件的实例代码讲解
Oct 16 Python
python 实现dict转json并保存文件
Dec 05 Python
Python log模块logging记录打印用法解析
Jan 20 Python
基于python检查矩阵计算结果
May 21 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
Jan 05 Python
Python必备技巧之函数的使用详解
Apr 04 Python
Python何绘制带有背景色块的折线图
Apr 23 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 header函数使用教程
2013/09/05 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
PHP模板解析类实例
2015/07/09 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
js清理Word格式示例代码
2014/02/13 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
python改变日志(logging)存放位置的示例
2014/03/27 Python
Python contextlib模块使用示例
2015/02/18 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
python开发前景如何
2020/06/11 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
Python中如何定义一个函数
2016/09/06 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
个人廉政承诺书
2015/04/28 职场文书
工程款申请报告
2015/05/15 职场文书
离婚协议书范文2016
2016/03/18 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS