当前位置:   article > 正文

selenium三大等待_智能等待

智能等待

使用场景:有时候当我们操作页面元素时,需要等待这个过程才能操作成功。

Ui自动化的时候,考虑到稳定性:多次运行同一脚本,都能够保证它是成功的。

一、强制等待:sleep(秒)

比如sleep(10),就必须等待10秒,才能执行下一步。

简单粗暴,不过代码将会有很多sleep,冗余度会提高。

二、智能等待:显性等待

专门针对特定元素而设置的等待,在规定的时间内找到元素,找到了就执行下一步,
没有找到抛出异常(TimeoutException)。效率高,可以自定义条件。

from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait(会话对象, 超时时长(秒),去查看条件的周期默认0.5).until(条件)

WebDriverWait(会话对象, 超时时长(秒),去查看条件的周期默认0.5).until_not(条件)

selenium3当中,每一个条件是以类的形式实现的。每一个类都有__init__, call

selenium4当中,每一个条件是以函数的形式实现的。每一个函数都有一个_predicate内部函数。闭包
使用显性等待的时候,先确定你的条件是什么。然后再去使用显性等待。

等待效果只有一次,不像隐性等待全局可用。

比较多的用法:显性等待 + 短暂的sleep

常用的条件:

visibility_of_element_located(locator) — locator对应的元素是可见的

element_to_be_clickable(mark) — mark对应的元素可点击

三、智能等待:隐形等待

调用find_element/find_elements方法的时候,如果元素没找到不会立马报错,
会主动使用隐性等待,达到最大等待时间后,抛出异常。

一个会话(浏览器打开到关闭这个过程)当中,只需要调用一次,全局可用。

没有办法对精准度的元素进行定位,会影响实际的运行效率。

三种方法一起使用代码如下:

 1 import time
 2 from selenium import webdriver
 3 from selenium.webdriver.support.wait import WebDriverWait
 4 from selenium.webdriver.support import expected_conditions as EC
 5 
 6 driver = webdriver.Chrome()
 7 driver.get("https://www.baidu.com")
 8 #隐形等待
 9 driver.implicitly_wait(10)
10 driver.maximize_window()
11 # 显性等待
12 #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素
13 el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")
14 el.click()
15 # 强制等待
16 time.sleep(3)
17 driver.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

显示等待结合预期条件判断代码如下:

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

# driver = webdriver.Chrome()
# driver.get("https://www.baidu.com")
# #隐形等待
# driver.implicitly_wait(10)
# driver.maximize_window()
# # 显性等待
# #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素
# el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")
# el.click()
# # 强制等待
# time.sleep(3)
# driver.quit()
#
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")

locator = ('xpath','//a[text()="新闻"]')
# WebDriverWait()一般与 until()或 until_not()方法配合使用
# until(),直到返回值为 True。
# until_not(),直到返回值为 Flase。
# 判断元素是否可见
# 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可见,如果超过设置时间仍检测不到,则抛出异常。
WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located(locator),message="元素可见")
# 判断元素是否可以点击
# 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可点击,如果超过设置时间仍检测不到,则抛出异常。
WebDriverWait(driver,5,0.5).until(EC.element_to_be_clickable(locator))
# 判断元素是否存在
# 在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间仍检测不到,则抛出异常。
WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(locator))
driver.find_element(*locator).click()
# 判断标题是否不存在
# 在设置时间内,默认每隔一段时间检测一次标题是否不存在,如果超过设置时间仍检测不到,则抛出异常。
WebDriverWait(driver,5,0.5).until_not(EC.title_is("123123"),message="标题不是这个")
time.sleep(3)
driver.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

资源分享【这份资料必须领取~

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号