UI 自动化里面等待方式应用场景!,工作感悟

Selenium 等待类型

Selenium提供了三种类型来处理不同的场景并增强自动化测试的可靠性。

  • • 隐式等待– Selenium 中的隐式等待是一种全局等待,适用于脚本中的所有元素。它设置任何元素在交互之前变得可用的最长等待时间。如果该元素在指定时间内出现,则脚本继续,否则会引发TimeoutException
  • • 显式等待– Selenium 中的显式等待是一种更细粒度的方法,允许您等待特定条件或元素。显式等待应用于各个元素,并提供更好的控制。通常使用WebDriverWait类和预期条件来定义自定义等待条件。显式等待对于有效处理具有不同加载时间的动态 Web 元素非常有用。
  • • Fluent Wait – Selenium 中的 Fluent Wait 允许用户以自定义的检查条件频率来等待满足特定条件。当处理可能需要不同时间来加载或更改状态的元素时,流畅的等待特别有用。此等待是使FluentWait类创建的,并配置了超时、轮询频率和要忽略的异常等选项。
Selenium 中的隐式等待

在 Selenium 中,隐式等待是一种指示 WebDriver在抛出异常之前等待一定时间的机制。它全局应用于整个脚本,其主要目的是等待元素出现在 DOM(文档对象模型)中,然后再对它们执行操作。

当设置隐式等待时,WebDriver 将在指定的时间内重复轮询 DOM,直到找到元素或超时期限到期。如果在指定时间内找到该元素,WebDriver 将继续执行脚本中的下一步。如果在隐式等待期间未找到该元素,则会引发异常。

默认情况下,隐式等待的值设置为零,这意味着如果未找到该元素,它将立即返回错误。要在脚本中使用隐式等待,使用以下语法:

driver.implicitly_wait(10)

在初始化 WebDriver 后立即在脚本中设置隐式等待。这为所有后续交互设置了统一的等待时间。

Selenium 中的显式等待

Selenium 中的显式等待是一种技术,其中 WebDriver 被指示等待满足特定条件,然后再继续执行脚本中的后续步骤。与全局应用并等待指定时间量的元素出现的隐式等待不同,显式等待侧重于单个元素的特定条件。

通过显式等待,等待某些条件,例如元素的存在、元素的可见性或可以配置元素处于特定状态的特定属性,然后再继续,使用以下语法:

wait = WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

element =wait.until(EC.presence_of_element_located((By.ID,“”)),message=“”)

driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔步长,默认为0.5s
ignored_exceptions:超时后的抛出的异常信息,默认抛出 NoSuchElementExeception 异常。
与until()或者until_not()方法结合使用
WebDriverWait(driver,10).until(method,message=“”)
调用该方法提供的驱动程序作为参数,直到返回值为True

预期条件的类型

显式等待提供了一种在执行测试脚本之前等待满足某些条件或因无法满足该条件而引发异常的方法。这是在 Selenium 的ExpectedConditions类的帮助下完成的。可以使用多个条件进行等待,如下所示:

  • • 元素可见性: visibilityOfElementLocated()条件确保元素存在于 DOM 中并且在页面上可见。
  • • 元素可点击性: elementToBeClickable()条件对于元素需要交互(例如单击按钮)的场景至关重要。
  • • 元素的存在: presenceOfElementLocated()条件等待 DOM 中至少存在一个元素。
  • • 元素的不可见性: invisibilityOfElementLocated()条件等待指定元素不可见。
  • 更多的我们可以浏览ExpectedConditions类的官方文档了解更多信息。
Selenium 中的流畅等待

在 Selenium 中,Fluent wait 提供了一种更灵活的方法,可以在继续执行脚本之前等待满足某些条件。它实现了 Wait 接口,并允许您定义轮询频率和等待期间要忽略的异常。

流畅的等待命令是使用Java中的Selenium FluentWait类实现的。FluentWait 的关键特性是其“流畅”或可链接语法,您可以在链中应用不同的条件和配置。

Wait fluentWait = new FluentWait(driver)
.withTimeout(60, SECONDS) // 自定义等待的总时间
.pollingEvery(2, SECONDS) // 自定义轮询频率
.ignoring(NoSuchElementException.class); //  自定义要忽略的异常
WebElement foo = fluentWait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver)  // 自定义等待条件
{
return driver.findElement(By.id(“kw”));
}
});

如这段代码片段所示,在实例化等待对象时,我们可以提及等待持续时间、轮询持续时间以及此等待可以忽略的异常。流畅等待的实例化后,可以在访问 Web 元素时使用它,方法是在 wait 的直到方法中传入一个Function 。

Selenium 几种等待对比

在 Selenium 中选择正确的等待策略对于顺利实现自动化至关重要。让我们比较一下隐式等待、显式等待和流畅等待,以便于理解。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

fG-1712703347096)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值