隐式等待、显式等待、流畅等待

2023-11-30

隐式、显式、流利等之间有什么区别?

如果我们在隐式等待中设置 10 秒,并且在 10 秒之前,则在 3 秒内只有元素被定位。

到时候会发生什么?它将等待 10 秒钟或继续进行。


隐式等待

隐式等待是一个配置的实现网络驱动程序实例即driver进行民意调查HTML DOM在一定的时间内(就NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS or DAYS)当尝试查找一个或多个元素(如果它们不能立即可用)时。默认设置是0这意味着driver当找到查找一个或多个元素的指令时,搜索开始并且结果立即可用。

在这种情况下,在重新加载网页之后,在立即搜索中可能会/可能不会找到一个或多个元素。所以你的自动化框架可能面临以下任何异常:

  • NoSuchElementException
  • TimeoutException
  • ElementNotVisibleException
  • ElementNotSelectableException

因此你需要诱导隐式等待。通过介绍隐式等待 the driver将轮询DOM Tree在配置的时间内寻找一个或多个元素。到那时,您一直在寻找的一个或多个元素可能在 DOM 中可用。正如在您的代码中您已经设置的那样隐式等待到一个值10秒,即driver将轮询 DOM10秒。

  • Python:

    driver.implicitly_wait(10)
    
  • Java:

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    

最后,一旦你设置了隐式等待, the 网络驱动程序实例即driver能够携带此配置直至其使用寿命。但是如果你需要改变粗略的时间网络驱动程序实例即driver to wait然后您可以按如下方式重新配置它:

  • Python:

    driver.implicitly_wait(5)
    
  • Java:

    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    

如果您在任何时候想要取消隐式等待您可以按如下方式重新配置它:

  • Python:

    driver.implicitly_wait(0)
    
  • Java:

    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    

流畅等待

流畅等待是实施Wait我们可以通过该界面进行配置timeout and 轮询间隔在飞行中。一个实例流利等待可以定义为配置等待条件的最长时间以及必须检查条件的频率。用户还可以配置等待忽略特定类型的例外情况在等待一个元素时,例如没有这样的元素异常在页面上。

  • Usage:

       // Waiting 30 seconds for an element to be present on the page, checking
       // for its presence once every 5 seconds.
       Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
           .withTimeout(30, SECONDS)
           .pollingEvery(5, SECONDS)
           .ignoring(NoSuchElementException.class);
    
       WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
         public WebElement apply(WebDriver driver) {
           return driver.findElement(By.id("foo"));
         }
       });
    

显式等待

显式等待俗称WebDriver等待是一个专门的实现流利等待用户可以通过它来定义、配置和实施网络驱动程序实例等待满足特定条件,然后再继续下一行代码。有一些方法可以帮助我们实现显式等待只会根据需要等待。WebDriver等待和这个结合预期条件是其中之一显式等待可以实现。

一个例子:

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
.
.
.
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("element_xpath")));
element.click();

解释:

此次实施显式等待在抛出之前等待最多 10 秒TimeoutException或者如果找到该元素,它将在 0 到 10 秒内返回。WebDriver等待默认情况下调用预期状况每 500 毫秒一次,直到成功返回。成功的返回值预期状况函数类型是Booleantrue 值或非空对象。


预期条件:

在自动化 Web 浏览器时,经常会遇到一些情况测试网络/移动应用程序。 Java、C# 和 Python 绑定包含这些方便的方法,因此我们不必编写预期状况我们自己进行类或为他们创建我们自己的实用程序包。一些预期条件 are:

  • alertIsPresent()
  • elementToBeClickable(locator)
  • elementToBeSelected(WebElement)
  • frameToBeAvailableAndSwitchToIt(locator)
  • invisibilityOf(element)

您可以找到有关支持的所有方法预期条件 here.


这个特定的查询:

  • 当搜索单个元素时,驱动程序将轮询 OM,直到找到该元素或配置的超时到期,然后再抛出NoSuchElementException.
  • 当搜索多个元素时,驱动程序将轮询 DOM,直到找到至少一个元素或配置的超时已过期。

因此,根据第一种情况,驱动程序将等待只需3秒.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

隐式等待、显式等待、流畅等待 的相关文章

随机推荐

  • 从弹性布局中的 justify-content 中排除具有固定定位的元素[重复]

    这个问题在这里已经有答案了 我目前正在尝试使用 Flexbox 构建响应式网站布局 根据屏幕尺寸我想要一个元素position fixed 这本身正在发挥作用 但是当我使用justify content space between 在包含一
  • JPanel 不响应按键侦听器

    我试图制作一个 JPanel 来显示您按每个导航键的次数 但它只显示 4 个零 在 keyPressed 方法中 我放置了以下代码来相应地处理按键 public void keyPressed KeyEvent event if event
  • 在 Spring-Boot 中从我的服务器调用另一个rest api

    我想根据用户的特定请求从我的后端调用另一个 web api 例如 我想打电话谷歌FCM发送消息 api 用于向事件中的特定用户发送消息 Does Retrofit有什么方法可以实现这一点吗 如果没有 我该怎么做 这个网站有一些使用 spri
  • 在 Matplotlib 中添加没有轴刻度/标签的空子图作为文本子图

    我的目标是创建具有四个子图的图 其中底部两个实际上只是空框 我将在其中显示一些文本 不幸的是 我所有删除 y 轴和 x 轴刻度线和标签的努力都失败了 我对 matplotlib 还很陌生 所以我确信我缺少一些简单的东西 这是我正在尝试的以及
  • C 中的错误处理? scanf和非法字符如何处理? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在用 C 编写一个程序 为了进行错误处理 它会告诉您在 scanf 时查找非法字符
  • 如何从 Windows 窗体应用程序打开记事本并在其中放置一些文本?

    我正在使用 VB NET 和 Visual Studio 2008 我的问题是 如何从 Windows 窗体应用程序打开记事本 然后在记事本窗口中放置一些文本字符串 最简单的方法是编写一个文本文件 然后打开它 而不是相反 您可以使用系统 文
  • 从 URL 获取文件内容?

    当我在浏览器中使用以下 URL 时 它会提示我下载包含 JSOn 内容的文本文件 点击上面网址查看下载的文件内容 根据您的 PHP 配置 这may很容易使用 jsonData json decode file get contents ht
  • Google Places API 是否可以通过maps.google.cn 域使用?

    Google Places API 可以通过maps google cn 域使用吗 这是来自中国的作品 curl https maps google cn maps api geocode json address 1600 Amphith
  • 将不安全 HTML 字符编码为 HTML 字符实体引用的 T-SQL 算法

    我需要创建一个插入触发器后在我的 SQL Server 2008 R2 数据库中 触发器需要从 INSERTED 中获取一些字段 处理它们并将它们放入插入的同一行的不同字段中 关于 加工 我需要帮助想出一个算法在 T SQL 代码中 对不安
  • 尝试获取上个月最后一天时奇怪的 PHP 日期行为

    我刚刚注意到 PHP 日期函数表现得很奇怪 有人能解释一下我做错了什么吗 以下代码显示相同的结果
  • 在正则表达式中创建第 n 层嵌套模式的算法

    正如中所解释的可以使用正则表达式来匹配嵌套模式吗 不可能创建正则表达式来匹配任意嵌套模式 但是是否有可能创建一个算法来生成第 n 级 嵌套 的正则表达式 基本上 我想更换trim whatever with rtrim ltrim what
  • Python - beautifulsoup,应用于文件夹中的每个文本文件并生成新的文本文件

    我正在使用以下 Python Beautifulsoup 代码从文本文件中删除 html 元素 from bs4 import BeautifulSoup with open textFileWithHtml txt as markup s
  • 忽略指定值的 numpy 数组的平均值

    我有许多一维 numpy ndarray 其中包含给定节点和网络中所有其他节点之间的路径长度 我想计算其平均值 但事实上 如果两个节点之间不存在路径 则算法会针对给定连接返回值 2147483647 这一事实使问题变得复杂 如果我不处理这个
  • (视觉)SVN 通过正则表达式忽略文件

    我需要排除具有以下模式的文件 ProjectFoo Data 0 9 14 lgp 如何将 RegEx 用于 Visual SVN 忽略列表 subversion 忽略列表不支持正则表达式 它们被实现为 glob file 模式 这些模式不
  • 如何在onclick事件中调用多个JavaScript函数?

    有什么办法可以使用onclickhtml 属性调用多个 JavaScript 函数 onclick doSomething doSomethingElse 但实际上 你最好不要使用onclick并通过 Javascript 代码将事件处理程
  • Python tkinter 跟踪错误

    我正在尝试为我的代码编写一个 GUI 我的计划是使用 tkinter 的StringVar DoubleVar等来实时监控我的输入 所以我发现DoubleVar trace w callback 功能 但是 每次我进行更改时都会遇到异常 E
  • 如何检查鼠标是否位于 MovieClip 上?

    没有听众参与 问题是 我可以用鼠标移到 and 鼠标输出侦听器 但如果您足够快地将鼠标拖动到影片剪辑上 则可能不会激活其中一个侦听器 我已经尝试过好几次了 我从来没有遇到过 mouseOver 和 mouseOut 的问题 但你可以使用 h
  • 我可以使用 Flutter 更改 iOS (Android) 上的底部颜色吗

    我们可以在 Flutter 中使用 API 在 iOS Android 上更改此颜色吗 是的 您可以使用 API 来更改底部安全区域的颜色 尝试使用以下代码 我希望你的问题能够得到解决 override Widget build Build
  • 返回上一个视图控制器不起作用

    我的第一个视图控制器有一个按钮 它触发 IBActiongoTo2ndVc 它呈现了第二个 ViewController class FirstVC UIViewController IBAction func goTo2ndVc let
  • 隐式等待、显式等待、流畅等待

    隐式 显式 流利等之间有什么区别 如果我们在隐式等待中设置 10 秒 并且在 10 秒之前 则在 3 秒内只有元素被定位 到时候会发生什么 它将等待 10 秒钟或继续进行 隐式等待 隐式等待是一个配置的实现网络驱动程序实例即driver进行