selenium三种等待方式详解

一、场景

我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间。

二、强制等待

1、利用time模块的sleep方法来实现,最简单粗暴的方法。

2、不管浏览器是否加载完成,都强制等待5s,时间一到,就会执行下面的代码,不建议使用这种等待方式,因为严重影响代码的执行速度

import time

from selenium import webdriver

# 启动浏览器
driver = webdriver.Chrome()

# 打开百度网页
driver.get("https://www.baidu.com")

# 定位输入框输入内容
driver.find_element("id","kw").send_keys("测试工程师")

# 等待5s
time.sleep(5)

#退出浏览器
driver.quit()

三、隐性等待

设置一个隐性等待时间10s,如果在这个时间内,网页加载完成,就会执行下一步操作,否则一直等到超时,然后再执行下一步操作,这种等待方式也会存在一个弊端,程序会一直等待整个页面加载完成,直到超时,但是有时候我们需要的哪一个元素,已经加载完成了,只是页面其他元素加载比较慢,我仍要等待所有的元素加载完成才会执行下一步。特点:全局设置,设置一次就够了

import time

from selenium import webdriver

# 启动浏览器
driver = webdriver.Chrome()

# 打开百度网页
driver.get("https://www.baidu.com")

# 隐性等待10s
driver.implicitly_wait(10)

# 定位输入框输入内容
driver.find_element("id","kw").send_keys("中国")

# 定位百度一下 点击按钮
driver.find_element('id','su').click()

# 点击搜索结果页的超文本链接,跳转新窗口
driver.find_element("xpath","//a[text()='中国政府网']").click()

# 等待5s
time.sleep(5)

#退出浏览器
driver.quit()

四、显性等待

1、上面提到了隐性等待存在的弊端,如果想等自己想要的元素被加载出来就执行下一步操作,这个时候就用到显性等待了

2、显性等待需要用到WebDriverWait,配合该类的unitl()和unitl_not()方法来使用

3、timeout=10---设置超时时间,poll_frequency=0.5---每隔多秒检测一次,可不传,有默认值。

4、还需要导入一个类expected_conditions,来使用他里面的定位元素方法。

5、TimeoutException 超时会抛出超时异常

import time

from selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

# 启动浏览器
driver = webdriver.Chrome()

# 打开百度网页
driver.get("https://www.baidu.com")

# # 隐性等待10s
# driver.implicitly_wait(10)

# 定位输入框输入内容
driver.find_element("id","kw").send_keys("中国")

# 定位百度一下 点击按钮
driver.find_element('id','su').click()

# 初始化一个等待器
wait = WebDriverWait(driver,timeout=10,poll_frequency=0.5)
wait.until(expected_conditions.element_to_be_clickable(("xpath","//a[text()='中国政府网']")))

# 点击搜索结果页的超文本链接,跳转新窗口
driver.find_element("xpath","//a[text()='中国政府网']").click()

# 等待5s
time.sleep(5)

#退出浏览器
driver.quit()

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试小白00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值