selenium中的三大等待

等待时做什么,为什么使用等待

在做自动化测试,设计测试用例的时候,有时下一步的操作会依赖上一步的结果或者内容,上一步操作成功之后才能进行下一步操作等,这时候,我们就需要使用等待,来判断上一步操作是否完成,什么时候可以进行下一步操作。

1、强制等待

sleep(),单位是秒
使用方法:sleep(X),等待X秒后,进行下一步操作。无论条件成立与否,都要等待到时间截至,才能进行下一步操作
缺点:不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经完成了,但等待时间还没有到,浪费时间),如果在用例中大量使用,会浪费不必要的等待时间,影响测试用例的执行效率。
优点:使用简单,可以在调试时使用。

from selenium import webdriver
import time

# 创建driver对象,指定Chrome浏览器
driver = webdriver.Chrome()
# 窗口最大化
driver.set_window_size(800, 600)
# 访问百度
driver.get("http://baidu.com")
# 等待15秒(强制等待)
time.sleep(15)
# 点击新闻
driver.find_element_by_xpath(‘//div[@id="u1"]//a[text()="新闻"]‘).click()
# 等待15秒(强制等待)
time.sleep(15)
# 点击某一条新闻,查看详情
driver.find_element_by_xpath(‘//li[@class="hdline3"]//a[@target="_blank"]‘).click()
# 等待5秒(强制等待)
time.sleep(5)
# 关闭窗口
driver.close()
# 关闭会话,关闭浏览器,关闭chromedriver
driver.quit()

2、隐式等待

driver.implicitly_wait()
隐形等待:等待元素被找到、等待命令执行
会话期间全局设置一次,所有的都通用
使用方法:implicitly_wait(X),在X时间内,页面加载完成,进行下一步操作。
设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步操作。
缺点:使用隐式等待,程序会一直等待整个页面加载完成,才会执行下一步操作;
优点:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。
但有时候页面想要的元素早已经加载完成了,但是因为网页上个别元素还没有加载完成,仍要等到页面全部完成才能执行下一步,使用也不是很灵活。

from selenium import webdriver
import time

# 创建Chrome会话
driver = webdriver.Chrome()

# 设置隐形等待:等待元素被找到、等待命令执行
# 等待时间上限为15秒,如5秒找到元素,则5秒后执行,若大于15秒,则报错
# 全局只设置一次,后边的命令都最多等待15秒
driver.implicitly_wait(15)
# 发起请求
driver.get("http://baidu.com")
# 点击"贴吧"
driver.find_element_by_xpath(‘//div[@id="u1"]//a[text()="贴吧"]‘).click()
time.sleep(5)
# 点击"英雄联盟"
driver.find_element_by_xpath(‘//div[@id="spage_liveshow_slide"]//a[@title="英雄联盟"]‘).click()
time.sleep(5)
# 关闭会话
driver.quit()

3、显示等待

当你的操作,引起了页面的变化,而你接下来的操作变化的元素时,一定要加等待
程序每隔X秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常。
缺点:使用相对比较复杂
优点:等待判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率。
使用方法:WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常).until(要执行的方法, 超时时返回的错误信息)

WebDriverWait类

until()方法:直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常。
until_not()方法:直到条件不成立返回为真,是当某元素消失或什么条件不成立则继续执行,等待结束。如果超时,抛出TimeoutException,将message传入异常。
expected_conditions是selenium的一个模块,其中包含一系列可用于判断的条件方法。

from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 创建Chrome会话
driver = webdriver.Chrome()

# 发起请求
driver.get("http://baidu.com")

# 等待的条件
loc_1 = (By.XPATH, ‘//div[@id="u1"]//a[text()="贴吧"]‘)
# 等待元素//div[@id="u1"]//a[text()="贴吧"]可见,等待上限为10秒
WebDriverWait(driver, 10).until(EC.visibility_of_element_located(loc_1))
# 点击"贴吧"
driver.find_element_by_xpath(‘//div[@id="u1"]//a[text()="贴吧"]‘).click()

# 等待//div[@id="spage_liveshow_slide"]//a[@title="英雄联盟"]元素可见
loc_2 = (By.XPATH, ‘//div[@id="spage_liveshow_slide"]//a[@title="英雄联盟"]‘)
WebDriverWait(driver, 10).until(EC.visibility_of_element_located(loc_2))
# 点击"英雄联盟"
driver.find_element_by_xpath(‘//div[@id="spage_liveshow_slide"]//a[@title="英雄联盟"]‘).click()
# time.sleep(5)

# 关闭会话
driver.quit()

原文地址:https://www.cnblogs.com/xingyunqiu/p/11497286.html

时间: 2024-11-09 19:10:40

selenium中的三大等待的相关文章

selenium中的显示等待,隐示等待,强制等待

我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为显示等待WebDriverWait().隐式等待implicitly_wait().强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别: 1.显式等待  WebDriverWait()      显式等待是你定义的一段代码,用于等待某个条件发生然后再

Selenium中三种等待的使用方式

在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待,每一种等待都有自己的优点或缺点,如何选择最优的等待方式呢.来看下这三种等待方式吧.选择合理的等待方式,可以规避网络延迟,代码不稳定问题 time(固定等待) 在开发自动化框架过程中,最忌讳使用Python自带模块的time的sleep方法进行等待,虽然可以自定义等待时间,但当网络条件良好时,依旧按照

python selenium 中的显示等待WebDriverWait与条件判断expected_conditions

#coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait base_url = "http://www.baidu.com"

webdriver中的三大等待及窗口的切换

一.傻等 适用于等待5S以内 time.sleep(seconds) 二.隐性等待 implicitly_wait(30)  一个会话只需要调用一次即可,设置等待上限,比如30S,如果你在30秒内元素出现了,就不等了,去执行下一行代码,如果30秒还没有出现,就报错,超时 driver = webdriver.Chrome()driver.implicitly_wait(30) driver.get("http://www.baidu.com") driver.find_element_

selenium 常见元素操作:三大等待

selenium 常见元素操作 三大等待 三大切换(iframe,window,alert) 下拉列表 鼠标和键盘 js+ dom应用() 上传操作 强制等待:time.sleep()        (译:私立破) 必须等待固定时间后才可以往下运行 from selenium import webdriver import time # 强制等待需要导入time,使用其中的sleep方法 # 强制等待 sleep(译:私立破) # 打开谷歌浏览器,建立会话.启动Chromedriver.exe

selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())---基于python

我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为显示等待WebDriverWait().隐式等待implicitly_wait().强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别 在前面的博文中简单介绍了<强制等待和隐士等待的区别和理解>,本文再详细的结合案例进行理解. sleep(): 强

Selenium中的几种等待方式,需特别注意implicitlyWait的用法(转)

最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. private boolean isElementPresent(By by) {     try { driver.findElement(by);       return true;     } catch (NoSuchElementException e) {       return

转:Selenium中的几种等待方式,需特别注意implicitlyWait的用法

最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. private boolean isElementPresent(By by) {     try { driver.findElement(by);       return true;     } catch (NoSuchElementException e) {       return

Selenium中的几种等待方式,需特别注意implicitlyWait的用法

转自http://blog.csdn.net/pf20050904/article/details/20052485?utm_source=tuicool 最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. private boolean isElementPresent(By by) {    try { driver.findElement(b