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. 1 import time

  2. 2 from selenium import webdriver

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

  4. 4 from selenium.webdriver.support import expected_conditions as EC

  5. 5

  6. 6 driver = webdriver.Chrome()

  7. 7 driver.get("https://www.baidu.com")

  8. 8 #隐形等待

  9. 9 driver.implicitly_wait(10)

  10. 10 driver.maximize_window()

  11. 11 # 显性等待

  12. 12 #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素

  13. 13 el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")

  14. 14 el.click()

  15. 15 # 强制等待

  16. 16 time.sleep(3)

  17. 17 driver.quit()

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

  1. 1 import time

  2. 2 from selenium import webdriver

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

  4. 4 from selenium.webdriver.support import expected_conditions as EC

  5. 5

  6. 6 # driver = webdriver.Chrome()

  7. 7 # driver.get("https://www.baidu.com")

  8. 8 # #隐形等待

  9. 9 # driver.implicitly_wait(10)

  10. 10 # driver.maximize_window()

  11. 11 # # 显性等待

  12. 12 # #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素

  13. 13 # el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")

  14. 14 # el.click()

  15. 15 # # 强制等待

  16. 16 # time.sleep(3)

  17. 17 # driver.quit()

  18. 18 #

  19. 19 driver = webdriver.Chrome()

  20. 20 driver.maximize_window()

  21. 21 driver.get("https://www.baidu.com")

  22. 22

  23. 23 locator = ('xpath','//a[text()="新闻"]')

  24. 24 # WebDriverWait()一般与 until()或 until_not()方法配合使用

  25. 25 # until(),直到返回值为 True。

  26. 26 # until_not(),直到返回值为 Flase。

  27. 27 # 判断元素是否可见

  28. 28 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可见,如果超过设置时间仍检测不到,则抛出异常。

  29. 29 WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located(locator),message="元素可见")

  30. 30 # 判断元素是否可以点击

  31. 31 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可点击,如果超过设置时间仍检测不到,则抛出异常。

  32. 32 WebDriverWait(driver,5,0.5).until(EC.element_to_be_clickable(locator))

  33. 33 # 判断元素是否存在

  34. 34 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间仍检测不到,则抛出异常。

  35. 35 WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(locator))

  36. 36 driver.find_element(*locator).click()

  37. 37 # 判断标题是否不存在

  38. 38 # 在设置时间内,默认每隔一段时间检测一次标题是否不存在,如果超过设置时间仍检测不到,则抛出异常。

  39. 39 WebDriverWait(driver,5,0.5).until_not(EC.title_is("123123"),message="标题不是这个")

  40. 40 time.sleep(3)

  41. 41 driver.quit()

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Selenium时,我们经常需要等待页面加载完成后再进行操作,以避免页面元素不存在或操作无效的异常。有两种方式可以实现页面等待:隐性等待和显性等待。 隐性等待是一种全局设置,在该设置下,Selenium等待一定的时间(以秒为单位),然后再执行下一步操作。如果在设定的时间内页面加载完成,就会立即执行下一步操作;如果超过设定的时间仍未加载完成,则抛出超时异常。隐性等待的特点是只需要设置一次,适用于整个测试过程。例如,可以使用以下代码设置隐性等待时间为10秒: ```python from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) # 设置隐性等待时间为10秒 # 在此之后进行页面操作 ``` 显性等待是一种在特定条件下等待页面加载完成后再执行下一步操作的方式。通过指定等待的最长时间和轮询频率,程序会等待条件满足后立即执行下一步操作,或者超过最长等待时间时抛出超时异常。显性等待的特点是可以对某个具体的元素或条件进行等待,更加灵活。例如,可以使用以下代码使用显性等待等待百度搜索结果页的超文本链接可点击后再进行点击操作: ```python from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Chrome() # 打开百度网页并进行搜索操作 wait = WebDriverWait(driver, timeout=10, poll_frequency=0.5) wait.until(EC.element_to_be_clickable(("xpath", "//a[text()='中国政府网']"))) # 在此之后进行点击操作 ``` 以上是使用Selenium进行页面等待的两种方式,可以根据具体场景选择合适的等待方式来确保页面加载完成后再进行操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值