Python中WebDriverWait等待使用

Python中WebDriverWait等待使用

强制等待:sleep()

import time

time.sleep(5)
print("1")

缺点:不智能,太多影响速度。

隐式等待:implicitly_wait()

driver.implicitly_wait(10) #隐式等待10秒

由webdriver提供的方法,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用,它不针对某一个元素,是全局元素等待,即在定位元素时,需要等待页面全部元素加载完成,才会执行下一个语句。如果超出了设置时间的则抛出异常。

缺点:当页面某些js无法加载,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成(浏览器标签左上角圈圈不再转),才会执行下一句。某些情况下会影响脚本执行速度。

显示等待:WebDriverWait()

我爱你

from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
  1. driver:浏览器驱动
  2. timeout:最长超时时间,默认以秒为单位
  3. poll_frequency:检测的间隔步长,默认为0.5s
  4. ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

与until()或者until_not()方法结合使用

WebDriverWait(driver,10).until(method,message="")
调用该方法提供的驱动程序作为参数,直到返回值为True

WebDriverWait(driver,10).until_not(method,message="")
调用该方法提供的驱动程序作为参数,直到返回值为False

在设置时间(10s)内,等待后面的条件发生。如果超过设置时间未发生,则抛出异常。在等待期间,每隔一定时间(默认0.5秒),调用until或until_not里的方法,直到它返回True或False.

WebDriverWait与expected_conditions结合使用

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

wait = WebDriverWait(driver,10,0.5)
element =wait.until(EC.presence_of_element_located((By.ID,"kw")),message="")
# 此处注意,如果省略message=“”,则By.ID外面是三层()

最初执行的代码一开始是这样写:presence_of_element_located(By.ID,“su”),这样相当于取到了3个参数(self, By.ID, “su”)
而presence_of_element_located类中__init__()方法取的确实是2个参数(self, locator),其中locator调用的是一个tuple(元组)
该元组(By.ID,“su”)作为一个整体,对应相当于1个参数,加上类实例化代表自身的self参数,正好就是2个参数
因此,执行代码正确的写法为:presence_of_element_located((By.ID,“su”)),即需要嵌套两层英文圆括号

显示等待,自定义等待条件

#设置等待
wait = WebDriverWait(driver,10,0.5)
#使用匿名函数
wait.until(lambda diver:driver.find_element_by_id('kw'))

expected_conditions类提供的预期条件判断的方法

方法说明
title_is判断当前页面的 title 是否完全等于(==)预期字符串,返回布尔值
title_contains判断当前页面的 title 是否包含预期字符串,返回布尔值
presence_of_element_located判断某个元素是否被加到了 dom 树里,并不代表该元素一定可见
visibility_of_element_located判断元素是否可见(可见代表元素非隐藏,并且元素宽和高都不等于 0)
visibility_of同上一方法,只是上一方法参数为locator,这个方法参数是 定位后的元素
presence_of_all_elements_located判断是否至少有 1 个元素存在于 dom 树中。举例:如果页面上有 n 个元素的 class 都是’wp’,那么只要有 1 个元素存在,这个方法就返回 True
text_to_be_present_in_element判断某个元素中的 text 是否 包含 了预期的字符串
text_to_be_present_in_element_value判断某个元素中的 value 属性是否包含 了预期的字符串
frame_to_be_available_and_switch_to_it判断该 frame 是否可以 switch进去,如果可以的话,返回 True 并且 switch 进去,否则返回 False
invisibility_of_element_located判断某个元素中是否不存在于dom树或不可见
element_to_be_clickable判断某个元素中是否可见并且可点击
staleness_of等某个元素从 dom 树中移除,注意,这个方法也是返回 True或 False
element_to_be_selected判断某个元素是否被选中了,一般用在下拉列表
element_selection_state_to_be判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be跟上面的方法作用一样,只是上面的方法传入定位到的 element,而这个方法传入 locator
alert_is_present判断页面上是否存在 alert

find_element_by_link_text横线的问题

from selenium.webdriver.common.by import By
 
ind_element_by_xpath('**')改写为 find_element(By.XPATH,'**')
 
find_element_by_class_name('**')改写为find_element(By.CLASS_NAME,'**')
 
find_element_by_id('**')改写为find_element(By.ID,'**');
 
find_element_by_name('**')改写为find_element(By.NAME,'**');
 
find_element_by_link_text('**')改写为find_element(By.LINK_TEXT,'**')
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python的Selenium WebDriverWait是一个等待器,用于等待页面元素加载完成或某个条件满足后再执行后续操作。它可以设置等待的时间和条件,例如等待元素可见、可点击、存在等。使用WebDriverWait可以提高自动化测试的稳定性和可靠性。 ### 回答2: Python Selenium WebDriverWait 是一种可以在 Python 的 Selenium 库使用等待工具。它可以用来等待特定的事件发生,并确保页面已经加载完毕,以便于我们执行下一步操作。 WebDriverWait 常用的参数包括等待时长 timeout(单位为秒)和轮询间隔 poll_frequency(单位为毫秒)。在等待期间 WebDriverWait 会每隔一段时间调用一次条件函数,直到这个条件函数返回 True 或者超时时间到达。 在使用条件函数方面,WebDriverWait 提供了两个通用的方法: 1. expected_conditions:针对某些对象的常用操作提供了预技术,以方便使用。 2. presence_of_element_located:等待可以被定位到的元素出现。 Python Selenium WebDriverWait 的用法如下: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 创建 WebDriver 对象 driver = webdriver.Chrome() # 访问页面 driver.get("http://www.example.com") # 等待 10 秒直到元素出现 element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myElement")) ) # 执行其他操作 element.click() # 关闭浏览器 driver.quit() ``` 在上面的代码WebDriverWait等待 10 秒直到 ID 为 "myElement" 的元素出现。如果在等待期间元素一直未出现,则会抛出 TimeoutException 异常。 总之,Python Selenium WebDriverWait 工具是一个重要的等待工具,可以帮助我们等待特定的事件并确保页面已经加载完毕。在使用过程,我们可以通过设置参数以及使用条件函数来满足我们的需求。 ### 回答3: Python Selenium WebDriverWait 是一个Python Selenium库的组件,它允许用户在Web应用程序等待指定的条件发生,然后执行其他操作。这个库相当于一个智能等待器,可以根据指定的条件帮助手动模拟浏览器行为。因此,在Selenium WebDriver使用WebDriverWait,可以使用户根据自己的需要设置等待时间,以便获得最佳的用户体验。 WebDriverWait主要用于等待页面元素的加载,它可以在代码指定等待时间,超时时间以及加载元素时所需的条件。当等待时间到了但元素仍未出现时,它可能会引发TimeoutException异常,而用户可以捕获该异常并处理。 WebDriverWait的语法格式如下: from selenium.webdriver.support.ui import WebDriverWait WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None).until(expected_condition, message='') 其: driver:WebDriver对象,必需的参数,它表示要在哪个浏览器上执行指定的WebDriver Wait。 timeout:等待时间,可选参数,默认设为30秒,即最长等待时间为30秒。 poll_frequency:调查间隔时间,可选参数,默认为0.5秒,即每0.5秒看一次。 ignored_exceptions:忽略异常,可选参数,默认不忽略。 expected_condition:检查的条件,必需参数,通常是selenium.webdriver.support.expected_conditions提供的预设方法之一。 message:超时后打印的错误消息,可选参数,默认为空字符串。 WebDriverWait主要有两个用途: 1. 等待元素出现 可以使用WebDriverWait等待页面上的某些元素出现,例如,你需要等待页面上的某个button元素可见后再单击该元素,则可以使用等待操作: from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待直到button元素可见 button = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myButton"))) 2. 等待某些动作或条件发生 WebDriverWait同样可以用于等待某些动作或条件发生。例如,你需要等待页面加载完成后再执行某些动作,则可以使用等待操作: from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待直到页面加载完成 WebDriverWait(driver, 10).until(EC.title_is("My Page Title")) 总之,WebDriverWait是Selenium非常重要的一个组件,它提供了一个非常灵活和方便的方法来处理浏览器的页面等待和延迟,是自动化测试必不可少的一部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值