• 3
  • 3
分享
  • selenium的三种等待方式(显示等待,隐式等待,强制等待)
  • TIMI 2022-06-10 10:45:04 字数 1501 阅读 2084 收藏 3

1、强制等待(无条件等待)

使用方法:time.sleep(delay)

delay的单位为秒,delay设置多少秒页面就会等待多少秒(死等),这个方法很容易让线程挂掉,使程序抛异常,所以要慎用此方法。

使用举例:打开百度,强制等待5秒

#导入强制等待模块
import time
from selenium import webdriver
 
wd = webdriver.Chrome()
wd.get('https://www.baidu.com')
#强制等待5秒
time.sleep(5)

2、显式等待(有条件等待)

当等待的条件满足后(一般用来判断需要等待的元素是否加载出来),就继续下一步操作。等不到就一直等,如果在规定的时间之内都没找到,那么就跳出Exception。

使用显示等待前需先导入显示等待所需模块和等待条件

#显式等待模块
from selenium.webdriver.support.ui import WebDriverWait
#显式等待条件
from selenium.webdriver.support import expected_conditions as EC

使用举例:

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
 
wd = webdriver.Chrome()
wd.get('http://www.baidu.com')
#wd是webdriver对象,10是最长等待时间,0.5是每0.5秒去查询对应的元素。until后面跟的等待具体条件,EC是判断条件,检查元素是否存在于页面的 DOM 上。
login_btn=WebDriverWait(wd,10,0.5).until(EC.presence_of_element_located((By.ID, "s-top-loginbtn")))
#点击元素
login_btn.click()

3、隐式等待(无条件等待,在一个时间段内等待)

  • 一次设置,全局生效。不要当作固定等待使用,不要每次需要等待时都写一次隐式等待。

  • 隐式等待设置了一个最长等待时间,在规定时间内网页加载完成(也就是一般情况下你看到浏览器标签栏那个小圈不再转就代表加载完成),则执行下一步,否则一直等到时间结束,然后执行下一步。

如果是只需等待页面中的一个元素加载就用显示等待,等待整个网页加载就用隐式等待。

使用方法:implicitly_wait(delay),delay的单位为秒

使用举例:打开www.qq.com,等待页面加载完成后,点击新闻链接

from selenium import webdriver
from selenium.webdriver.common.by import By
wd = webdriver.Chrome()
wd.get('http://www.qq.com')
wd.implicitly_wait(10)
wd.find_element(By.CSS_SELECTOR,'[href="http://news.qq.com/"]').click()


作者:卷王之王thorne

原文链接:https://blog.csdn.net/qq_44728587/article/details/122997412

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 前言selenium自动化+ pytest测试框架本章你需要一定的python基础一定的selenium基础——不讲selenium,不会的自己去看selenium中文翻译网测试框架简介测试框架有什么优点呢:代码复用率高,如果不使用框架的话,代码会很冗余可以组装日志、报告、邮件等一些高级功能提高元素等数据的可维护性,元素发生变化时,只需要更新一下配置文件使用更灵活的PageObject设计模式测试框架的整体目录目录/文件说明是否为python包common这个包中存放的是常见的通用的类 是config配置文件目录是logs日志目录page对selenium的方放进行深度的封装是pag...
            5 9 5834
            分享
          • 性能测试是软件开发和应用过程中至关重要的环节。它是评估系统性能、稳定性和可扩展性的有效手段,可以确保软件在真实环境中高效运行。在现代技术快速发展的时代,性能测试的重要性愈发显著。性能测试在软件开发和应用过程中的重要性不可低估。它是保障用户体验、发现潜在问题、提高系统可靠性的关键手段。同时,遵循性能测试的最佳实践,能够确保测试的准确性和可靠性,提高测试效率,为软件开发和应用提供有力的保障。只有重视性能测试,并遵循最佳实践,我们才能构建稳定、高效的应用,满足用户对技术的不断追求和挑战。下面分享几个性能测试中最佳实践,以供参考。# 设定明确的性能目标在开始性能测试之前,首要任务是设定明确的性能目标。...
            0 0 914
            分享
          •   一、引言  对于大厂的同学来说,接口自动化是个老生常谈的话题了,毕竟每年的MTSC大会议题都已经能佐证了,不是大数据测试,就是AI测试等等(越来越高大上了)。不可否认这些专项的方向是质量智能化发展的方向,但是凡事都遵循2/8定律,80%的从事软件测试的同学或许对这些并不感冒,因为大部分测试同学分布于中小厂,而他们大多停留在如何更好更快地进行接口自动化的阶段。  小厂质量团队地位低,在团队中发言分量轻,项目中往往处于劣势,项目的测试时间不能保证,更别提搞什么高大上的质量专项了,能把接口自动化测试做好就是大事一件,节省不少时间了。  因此,聊聊接口自动化还是非常有必要的。  二、“JMeter...
            0 0 886
            分享
          •   关于自动化的学习,一直是大家关注的话题,那么Python学习到什么程度就可以进行自动化测试了呢?下面结合我自身的学习历程跟大家分享一下。  初识自动化  刚开始学自动化的时候,是跟着视频课程学习的,当时学习完用Selenium进行脚本录制之后,就觉得自动化测试好简单,录制脚本后回放脚本就行了,所以学完录制脚本之后,就没再往下继续学习,使用Selenium脚本录制的功能进行脚本的录制回放。  结果可想而知,录制脚本时,一个鼠标悬浮事件没有录制上,导致元素找不到,最终整个脚本以失败而告终。  因为随着前台开发技术的不断更新换代,并不是所有的事件、操作都能使用Selenium自动录制上,还需要我...
            0 0 918
            分享
          • 1、基于webdriver的分层自动化框架及平台搭建,目前刚好在做这一块的工作,对于分层次和平台搭建,想问下大神有什么好的建议?我们拿数据驱动框架来举个例子。下面是我做的一个简单的框架样式:这样一个结构,分为base层(公共用例),element(元素层),properties(UI map层--properties文件),resource(资源层),task(存储suite的testng文件),testcase(case层),util(底层,方法层)。用这样一个结构来更容易理解,更便于维护我们的框架。当然,这是一个基本demo哈,可以根据自己的实际情况扩展。总之,没有最好的,只有最适合的,哈...
            0 1 2302
            分享
      • 51testing软件测试圈微信