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之折腾一下目录
Oct 24 Python
python使用arp欺骗伪造网关的方法
Apr 24 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
python绘制玫瑰的实现代码
Mar 02 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Pytest中skip和skipif的具体使用方法
Jun 30 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集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
详解php命令注入攻击
2019/04/06 PHP
javascript cookies操作集合
2010/04/12 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
轻松掌握python设计模式之访问者模式
2016/11/18 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
python使用logging模块发送邮件代码示例
2018/01/18 Python
Python列表与元组的异同详解
2019/07/02 Python
python通过实例讲解反射机制
2019/10/17 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
计算机专业自荐信
2013/10/14 职场文书
网络书店创业计划书
2014/02/07 职场文书
周年庆促销方案
2014/03/15 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
整脏治乱工作简报
2015/07/21 职场文书
运动会3000米加油稿
2015/07/21 职场文书
学生会干部任命书
2015/09/21 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android
Python基于百度API识别并提取图片中文字
2021/06/27 Python