• 3
  • 3
分享
  • selenium的三种等待方式(显示等待,隐式等待,强制等待)
  • TIMI 2022-06-10 10:45:04 字数 1501 阅读 1986 收藏 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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 凡事了解一些性能测试的工程师,都知道要做好性能测试除了要会使用性能测试工具编写性能测试脚本外,更重要的两项工作是性能测试执行后,到底是否存在性能故障?以及存在性能故障的原因存在于何处?是网络原因、数据库原因、算法原因、硬件设备原因亦或是架构设计等等其他原因造成的呢?即使定位了性能故障,接下来如何对系统性能进行调优,使其满足用户的需求,这又是一大难点工作......而今天想和大家交流的是性能测试中最最有价值又最最容易被忽略的事情—性能需求及风险分析!我们先看一张图,下图是软件缺陷的修复费用示意图,大家一定都不陌生。从这张图中我们可以清楚的看出在后期bug修复的成本可能比需求阶段高出1000倍。那...
            1 2 1745
            分享
          • 1、双击jmeter.bat文件,进入jmter界面,如下图;2、右击测试计划--添加--线程(用户)--线程组,添加一个线程组,如下图所示;3、右击线程组--添加--取样器--HTTP请求,添加一个HTTP请求,如下图所示4、根据给定的接口文档或者自己抓包获取的URL相关信息,填写以下信息:5、示例URL:https://baidu.gh.cn/baidu.service/LoginService/Login(此网址为错误网址,仅作举例使用)Request Method(请求方式): POSTjmeter内填写以下信息(如下图):协议:https服务器名称或IP:baidu.gh.cn路径:...
            0 0 5754
            分享
          • 众所周知,事务是一个实体——通常是一组 SQL 语句,或者语句和存储过程调用的组合,应该全部执行或不执行。例如,如果一个事务有 4 个语句 - S1 到 S4 并且例如 - S4 抛出一些错误可能是由于不正确的语法或访问或任何功能问题,那么语句 S1 到 S3 将被回滚并且数据库将到达它的原始状态,好像没有执行任何语句。理解 MySQL TRANSACTION 的最佳示例是同一家银行的 2 个账户之间的汇款。想象一下,如果没有 TRANSACTION,这将如何工作?假设借记成功,但贷记没有发生,可能是因为一些数据库问题。在这种情况下,数据库将处于不一致的状态。因此,在这种情况下,客户的账户会借...
            0 0 940
            分享
          • 配置要求:小程序X5内核浏览器环境配置1.使用微信浏览器进入debugx5.qq.com,勾选调试功能,如果进入页面不是这个X5调试的话,先跳过2.如果进入的不是x5内核,先进入debugmm.qq.com/?forcex5=true获取小程序的进程和名字1.我们先使用微信进入一个小程序,比如我这边进入BOSS直聘(进入之前尽量把所有的程序都杀死,方便我们找到小程序)adb shell dumpsys activity top | findstr ACTIVITY#获取正在运行的程序 adb shell ...
            0 0 1782
            分享
          • (验收测试),系统开发生命周期方法论的一个阶段,这时相关的用户和/或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。这是管理性和防御性控制。Acceptance testing验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。 验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的...
            12 12 2826
            分享
      • 51testing软件测试圈微信