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的socket模块源码中的一些实现要点分析
Jun 06 Python
Python 3中的yield from语法详解
Jan 18 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
Python numpy 常用函数总结
Dec 07 Python
详解flask入门模板引擎
Jul 18 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
详解python路径拼接os.path.join()函数的用法
Oct 09 Python
在 Python 中使用 7zip 备份文件的操作
Dec 11 Python
golang中的空接口使用详解
Mar 30 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 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+MySql编写聊天室
2006/10/09 PHP
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
jquery tab插件制作实现代码
2010/06/22 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
Apache如何部署django项目
2017/05/21 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python取代netcat过程分析
2018/02/10 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
Python中的枚举类型示例介绍
2019/01/09 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
java关于string最常出现的面试题整理
2021/01/18 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
电气自动化专业职业规划范文
2014/02/16 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书