当前位置: 首页 > 面试题库 >

如何以及何时实施刷新(ExpectedCondition WebDriver的状态)?

冯元徽
2023-03-14
问题内容

我正在研究ExpectedCondtions类的方法,发现一种方法:刷新

我可以理解,当您获取StaleElementReferenceException并且想要再次检索该元素时可以使用该方法,这样可以避免StaleElementReferenceException

我的上述理解可能不正确,因此我想确认:

  1. 什么时候refreshed应该使用?
  2. something以下代码的一部分应该是什么代码:

wait.until(ExpectedConditions.refreshed(**something**));

有人可以举例说明吗?


问题答案:

根据消息来源:

条件的包装器,它允许元素通过重绘进行更新。这可以解决具有两部分的条件问题:找到一个元素,然后检查其上的某些条件。对于这些条件,有可能先找到一个元素,然后在客户端将其重画。如果发生这种情况,则在检查条件的第二部分时会引发{@link
StaleElementReferenceException}。

因此,基本上,这是一种等待对对象完成DOM操作的方法。

通常,执行driver.findElement 此操作时,该对象表示该对象是什么。

当DOM被操纵后,并在单击一个按钮后说,将一个类添加到该元素。如果您尝试对所述元素执行操作,则该操作将引发,StaleElementReferenceException
因为现在WebElement返回的现在不代表更新后的元素。

refreshed当您期望DOM操作发生时,您将使用它,而您要等到在DOM中完成操作为止。

例:

<body>
  <button id="myBtn" class="" onmouseover="this.class = \"hovered\";" />
</body>

// pseudo-code
1. WebElement button = driver.findElement(By.id("myBtn")); // right now, if you read the Class, it will return ""
2. button.hoverOver(); // now the class will be "hovered"
3. wait.until(ExpectedConditions.refreshed(button));
4. button = driver.findElement(By.id("myBtn")); // by this point, the DOM manipulation should have finished since we used refreshed.
5. button.getClass();  // will now == "hovered"

请注意,如果您button.click()在第3行执行a语句,则由于DOM已在此时进行处理,因此它将引发StaleReferenceException。

在使用Selenium的这些年中,我从未使用过这种条件,因此我认为这是一种“极端情况”,您很可能不必担心使用。希望这可以帮助!



 类似资料:
  • 问题内容: 我看过几个网站,这些网站向您显示数据库中正在发生的事情的实时更新。一个例子可能是 股票行情实时显示股票价格的网站 显示诸如“其他用户当前正在搜索的内容”之类的数据。 我认为这将涉及某种轮询机制,该机制每隔几秒钟会查询一次数据库并将其呈现在网页上。但是,从性能角度考虑时,这种想法使我感到恐惧。 在我正在处理的应用程序中,我需要显示用户提交的操作的实时状态。用户等待该过程完成。当操作完成时

  • 问题内容: Redux文档的第一个原理是: 整个应用程序的状态存储在单个存储中的对象树中。 我实际上以为我很好地理解了所有原则。但是我现在对应用程序的含义感到困惑。 我知道,如果应用程序只是网站中复杂的小部分之一,并且仅用一页即可工作。但是,如果申请意味着整个网站怎么办?我应该使用LocalStorage还是cookie或其他保留状态树的东西?但是如果浏览器不支持LocalStorage怎么办?

  • 问题内容: 在Java程序(Java 1.5)中,我有一个BufferedWriter,它包装了Filewriter,并且多次调用write()…结果文件很大… 在此文件的各行中,其中一些是不完整的… 我每次写东西时都需要调用flush(但是我怀疑这样做效率不高)还是使用BufferedWriter的另一种方法还是使用另一种类…? (由于我要编写的行数不胜数,所以我确实希望有一些高效的东西。)理想

  • 问题内容: 您如何“忘记”以前的地块 我正在尝试使用绘制多个时间 代码如下: 不幸的是,无论我做什么,我都会得到相同的情节(实际上是从我之前运行并完成的其他代码中得到的)。 有任何想法吗? 问题答案: 我宁愿每次都使用它来 清除当前图形, 而不是关闭并重新打开它,以保持窗口大小并为您提供更好的性能和更好的内存使用率。 同样,您可以 清除当前 轴。 要清除特定的轴(例如,在一个图形中有多个轴时很有用

  • 问题内容: 我将我的elasticsearch服务器放在提供基本身份验证的Apache反向代理后面。 直接从浏览器向Apache进行身份验证可以正常工作。但是,当我使用Kibana 3访问服务器时,会收到身份验证错误。 显然是因为没有auth标头与Kibana的Ajax调用一起发送。 我将以下内容添加到Kibana供应商目录中的elastic-angular-client.js中,以实现快速而肮脏

  • 在Perl中,使用Moo,可以围绕sub实现sub,它将围绕类中的其他方法。 如何在Raku中实现这种行为,最好使用角色?