Appium+PythonUI自动化之webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行。我们可以通过在脚本中设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败,常用的等待方式有三种:
一、强制等待 time.sleep(5)

强制等待是利用python语言自带的time库中的sleep()方法:

import time

time.sleep(3)

sleep()顾明思义就是睡觉的意思,就是脚本一旦执行到条语句sleep(10)就睡10s,再执行后面的语句,他是一个强制等待的方式,使得整个脚本暂停。但是这种方式会导致这个脚本运行时间过长,不到万不得已尽可能少用,特殊情况下,时间设置最好不超过1秒,一般0.5秒。

二、 隐式等待(全局)driver.implicitly_wait(20)

隐式等待相比强制等待更智能,顾明思义,在脚本中我们一般看不到等待语句,但是它会在每个页面加载的时候自动等待;隐式等待只需要声明一次,一般在打开浏览器后进行声明。声明之后对整个drvier的生命周期都有效,后面不用重复声明。 implicitly_wait()方法用来等待页面加载完成(直观的就是浏览器tab页上的小圈圈转完),implicitly_wait(10),超时时间10s,10秒内一旦加载完成,就执行下一条语句;如果10秒内页面都没有加载完,就超时抛出异常。

但是隐式等待依然存在一个问题,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步。所以,这里webdriver提供了一种更加智能的等待方式:显示等待

隐式等待的运用from selenium import webdriver
import unittestclass TestBase(unittest.TestCase):def setUp(self):self.driver=webdriver.Chrome()   #驱动浏览器self.driver.implicitly_wait(10)  #设置隐式等待self.driver.maximize_window()    #最大化浏览器def test(self):print('这是一个测试用例')def tearDown(self):self.driver.quit()if __name__=='__main__':unittest.main()

三、显示等待 WebDriverWait(driver,30,0.1)

显示等待与隐式等待相对,显示等待必须在每个需要等待的元素前面进行声明。是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException

用法例1:
#引入WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
#引入expected_conditions类,并重命名为EC
from selenium.webdriver.support expected_conditions as EC
#引入By类
from selenium.webdriver.common.by import By#设置等待
wait = WebDriverWait(driver,10,0.5)
wait.until(EC.presence_of_element_located((By.ID,'KW')))用法例2:
loc = ("xpath", "//*[@text='允许']")
e = WebDriverWait(driver, 1, 0.5).until(EC.presence_of_element_located(loc))
e.click()

显示等待需要用到两个类:

WebDriverWait和expected_conditions两个类。

1、WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

driver:浏览器驱动

timeout:最长超时时间,默认以秒为单位

poll_frequency:检测的间隔步长,默认为0.5s

ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

WebDriverWait()中的until()和until_not()方法

until

method: 在等待期间,每隔一段时间(__init__中的poll_frequency)调用这个传入的方法,直到返回值不是False

message: 如果超时,抛出TimeoutException,将message传入异常

until_not

与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。

2、expected_conditions类

各种类,达到某种条件,返回True和False

presence_of_element_located 判断某个元素是否被加到了DOM树里,并不代表该元素一定可见

visibility_of_element_located判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于0

关于显示等待,也可以自己写条件:

#设置等待

wait = WebDriverWait(driver,10,0.5)

#使用匿名函数

wait.until(lambda diver:driver.find_element_by_id('kw'))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jop怎么读音英语怎么说_“跨年”英语怎么说?

2020年已经过去了31日晚上跨年夜,你在哪里跨年呢?今天的问题来了,你知道“跨年”用英语怎么说吗?一起学习一下吧。“跨年夜”英语怎么说?跨年夜的英语表达是:Spend New Years Eve / Celebrate New Years Ev…

吴恩达深度学习笔记——卷积神经网络(CNN)

目录 一、计算机视觉(Computer vision) 二、边缘检测示例(Edge detection example) 三、更多的边缘检测内容(More edge detection) 四、Padding 五、卷积步长(Strided convolution&#xff…

Python读取写入yaml文件

一、yaml文件介绍 yaml是一个专门用来写配置文件的语言。 1. yaml文件规则 区分大小写;使用缩进表示层级关系;使用空格键缩进,而非Tab键缩进缩进的空格数目不固定,只需要相同层级的元素左侧对齐;文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标…

react实现全选和反选_全选的实现

在很多的表单中我们都会看到有一个这样的功能&#xff0c;全选后进行一系列的操作。如操作前操作后简单的js实现首先要定义多选框&#xff0c;在表头可以使用id来定义同时添加onclick点击事件<input type"checkbox" id"all" onclick"checkAllCart(…

对tf.nn.softmax的理解

Softmax的含义&#xff1a;Softmax简单的说就是把一个N*1的向量归一化为&#xff08;0&#xff0c;1&#xff09;之间的值&#xff0c;由于其中采用指数运算&#xff0c;使得向量中数值较大的量特征更加明显。 如图所示&#xff0c;在等号左边部分就是全连接层做的事。 W是全连…

Python Pytest装饰器@pytest.mark.parametrize详解

Pytest中装饰器@pytest.mark.parametrize(参数名,list)可以实现测试用例参数化,类似DDT 如:@pytest.mark.parametrize(请求方式,接口地址,传参,预期结果,[(get,www.baidu.com,{"page":1},{"code":0,"msg":"成功"}),(post,www.baidu.…

面试后要请你吃饭_面试问同事请吃饭唯独不叫你咋办?小伙说这是好机会,当场被录取...

分享职场故事&#xff0c;交流职场经验&#xff0c;欢迎关注“罗波”。不知道大家在面试的过程中&#xff0c;有没有遇到过一些考官出了非常奇葩或者让你难以回答的题目。曾经在一次人事招聘的面试环节中&#xff0c;我的朋友小何就遇到了这样的一个问题&#xff0c;当时领导问…

exp和e区分

exp(n)代表e的多少次 exp(1)2.71 e-1表示10^-1次 e-10.1

Pytest全局用例共用之conftest.py详解

一、’conftest特点: 1、可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用了一次fixture,或调用多次fixture 2、conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件 3、不需要import导入 conftest.py,pytest用例会自动识别该文件,放到项…

心动的本质是什么_那一刻,我怦然心动了......

见到布莱斯罗斯基的第一天&#xff0c;我心动了。他的双眸有种魔力让我如痴如醉。女孩对一个刚见面的男孩一见钟情&#xff0c;男孩成了她的邻居&#xff0c;而她管这种感觉叫&#xff1a;怦然心动。2010年《怦然心动》上映&#xff0c;导演罗伯莱纳用一棵树&#xff0c;一对小…

筒灯智能驱动芯片作用_如然之光,魅族 Lipro 智能家居发布首期健康照明系列--智能设备 -...

1 月 5 日&#xff0c;魅族科技(MEIZU)正式发布了 Lipro 智能家居旗下的首期产品&#xff0c;Lipro 健康照明系列。作为 Lipro 品牌的首次产品亮相&#xff0c;Lipro 健康照明系列集顶尖光源品质与优雅工业设计于一体&#xff0c;为用户带来全场景、高品质的光照体验。Lipro 健…

vue 如何生成一个dom元素_通过一个简单的示例学习如何编写Vue组件

大家好&#xff0c;本篇文章我将带着大家一起学习如何编写自定义组件(Components)&#xff0c;通过「vue基础」新手快速入门篇(一)这篇文章的学习&#xff0c;我们知道了 Vue 设计的目的就是为了方便我们创建基于组件UI的项目。基于这个设计原则&#xff0c;我们可以更专注于设…

tensorFlow13卷积神经网络发展

数据增强&#xff1a;增加训练数据&#xff0c;水平翻转&#xff0c;改变对比度 dim代表插入的位置。0代表第一个位置&#xff0c;1表示第二个位置&#xff0c;-1表示最后一个位置

native 真机测试react_React native 安卓真机调试

一、准备工作&#xff1a;1、检测adb是否已经在环境变量中配置&#xff0c;打开&#xff1a;计算机”-“属性”-“高级属性设置”&#xff0c;在高级选项里点击“环境变量”&#xff0c;查看是否设置了adb.exe路径&#xff0c;如果没有就必须添加环境变量操作&#xff1b;或者在…

物体运动到一个点停止_大颗粒搭建中常见的结构运动

今天&#xff0c;给大家带来大颗粒搭建中常见的结构家长们可以带孩子一起将原理编程实践举一反三&#xff0c;创造创新&#xff01;1齿轮传动齿轮传动是指用主、从动轮的齿轮进行动力传递&#xff0c;从而达到使物体运动的作用。① 减速传动当小轮是主动力大轮是从动轮时物体作…

第k个数组中的最小值

练习1&#xff1a; 二维vector操作&#xff1a; #include<iostream> #include <vector> using namespace std; int main() {vector<vector<int>> a;vector<int> b;b.push_back(1);b.push_back(2);vector<int> c;c.push_back(11);c.push_b…

python不能安装怎么办_python3安装不上怎么办

下载安装程序Python官方的解释器安装包&#xff0c;可以 登录Python 官方网站 下载。点击这里下载注意&#xff1a;如果您要在Windows7上运行Python3.6版本的解释器&#xff0c;一定确保Windows已经安装了 Win7 service pack1 补丁包 &#xff0c;否则安装Python3.6解释器会失败…

VS中监视窗口,即时窗口和输出窗口的使用

以下内容来自&#xff1a;http://shashoutian2005.blog.163.com/blog/static/1685415200971845843605/ 一、监视窗口 &#xff11;、配置应用程序&#xff0c;使应用程序处于调试状态。 &#xff12;、点击“调试”----“窗口”----“监视”----“监视&#xff11;”&#x…

云米冰箱能控制扫地机器人_既能解放劳动力又能提升家庭幸福指数的小家电,云米互联网扫地机Pro开箱!...

既能解放劳动力又能提升家庭幸福指数的小家电&#xff0c;云米互联网扫地机Pro开箱&#xff01;2019-01-15 15:15:004点赞7收藏10评论年底了两人工作都比较忙&#xff0c;周六经常还得去加个班&#xff0c;难得有个周日必须得睡个懒觉呀&#xff0c;基本一睁眼就是9点60了&…