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如何实现元素等待的更多相关文章
- Selenium with Python 008 - WebDriver 元素等待
如今大多数Web应用程序使用Ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成的,这给元素的定位增加了困难.如果因为在加载某个元素时延迟而造成ElementNotVisibleE ...
- Python+Selenium设置元素等待
显式等待 显式等待使 WebdDriver 等待某个条件成立时继续执行,否则在达到最大时长时抛弃超时异常 (TimeoutException). #coding=utf-8 from selenium ...
- Python+Selenium笔记(十):元素等待机制
(一) 前言 突然的资源受限或网络延迟,可能导致找不到目标元素,这时测试报告会显示测试失败.这时需要一种延时机制,来使脚本的运行速度与程序的响应速度相匹配,WebDriver为这种情况提供了隐式等待 ...
- Appium+python自动化(二十四)- 白素贞千年等一回许仙 - 元素等待(超详解)
简介 许仙小时候最喜欢吃又甜又软的汤圆了,一次一颗汤圆落入西湖,被一条小白蛇衔走了.十几年后,一位身着白衣.有青衣丫鬟相伴的美丽女子与许仙相识了,她叫白娘子.白娘子聪明又善良,两个人很快走到了一起.靠 ...
- Python+Appium自动化测试(6)-元素等待方法与重新封装元素定位方法
在appium自动化测试脚本运行的过程中,因为网络不稳定.测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待 ...
- python selenium 三种等待方式详解[转]
python selenium 三种等待方式详解 引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...
- Selenium(十一):设置元素等待、上传文件、下载文件
1. 设置元素等待 前面我们接触了几个元素等待方法,sleep.implicitly_wait方法,这一章我们就来整体学一下. 现在大多数Web应用程序使用的都是AJAX技术.当浏览器加载页面时,页面 ...
- Python+Selenium自动化-设置等待三种等待方法
Python+Selenium自动化-设置等待三种等待方法 如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候,就需要我们通过设置一个等待条件,等待页面元素加载完成,避免出现 ...
- 『心善渊』Selenium3.0基础 — 23、Selenium元素等待
目录 1.什么是元素等待 2.为什么要设置元素等待 3.Selenium中常用的等待方式 4.强制等待 5.隐式等待 (1)隐式等待介绍 (2)示例 6.显式等待 (1)显式等待介绍 (2)语法 (3 ...
随机推荐
- cmd切换路径和查看路径下的文件的命令
查看当前路径下的文件: 1.1首先敲入命令 D: 则进入D盘目录,如下图所示: 1.2进入D盘目录后,敲入命令 dir 则显示D盘下的所有文件,如下图所示: 入上所述,在Windows系统的c ...
- 【西北师大-2108Java】期中成绩汇总
[西北师大-2108Java]期中成绩汇总 作业成绩 2018软件工程 得分排行 千帆竞发图 得分明细 学号 博客 博客 总分 201571030325 325 60 201571030332 htt ...
- Redis缓存雪崩,缓存穿透,热点key解决方案和分析
缓存穿透 缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力. (查询一个必然不存在的数据.比如文章表,查询一个不存 ...
- IT兄弟连 HTML5教程 了解HTML5的主流应用2
3 与用户交互的特效 十多年前做一个页面,只要结构清晰并且内容呈现完整,就是一个非常不错的网站了.而现在的用户对视觉的体验要求越来越高,在用户的潜意识中,页面做的越炫则代表公司实力越强.不管是整体页 ...
- 【文本处理命令】之sed命令详解
sed行处理命令详解 一.简介 sed命令是一种在线编辑器.一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的,它一次处理一行内容.处理时,把当前处 ...
- selenium常用的三种等待方式
一.强制等待 使用方法:sleep(X),等待X秒后,进行下一步操作. 第一种也是使用最简单的一种办法就是强制等待sleep(X),强制让浏览器等待X秒,不管当前操作是否完成,是否可以进行下一步操作, ...
- 解决SVN 被锁且Cleanup无效问题
开发两年多,依然用svn做代码管理工具,看到隔壁java组用git,心向往之,奈何苦苦不得机会,既然用svn,那么就说一说svn碰到的问题如何解决吧. 有时候我们在提交,或者更新代码时,由于网络或其他 ...
- 使用zabbix监控linux的io
zabbix自带的监控linux的模板中并没有监控io这项,而实际生产中又需要监控io,如何监控呢. 错误的示例 这里我特意贴出错误的示例出来,是因为我在网上搜如何使用zabbix监控io的文章时,好 ...
- Android调用打印机
打印机其实和Android没有什么大的关系,和linux内核关联才是比较强的. 最终的结果是要在Android实现驱动打印机,但是一般调试一个新的驱动的流程是这样的:1.先在linux PC上进行测试 ...
- Java开发桌面程序学习(二)————fxml布局与控件学习
JavaFx项目 新建完项目,我们的项目有三个文件 Main.java 程序入口类,载入界面并显示 Controller.java 事件处理,与fxml绑定 Sample.fxml 界面 sample ...