【问题标题】:What is setElementConverter and how does it work in Selenium WebDriver?什么是 setElementConverter,它在 Selenium WebDriver 中如何工作?
【发布时间】:2014-07-24 15:56:38
【问题描述】:

我在查找页面刷新的元素时遇到问题。现在尝试对元素执行任何操作会在StaleElementReferenceException 下方抛出一条消息Element is no longer valid

查找此url

上面的参考网址上有一个注释关于:

Should you wish to head down this route, the simplest hook point is to call setElementConverter

setElementConverter 是什么或如何使用的? google了一下,没找到上述方法的实际实现。

【问题讨论】:

  • 你能不能给个代码sn-p 不起作用?
  • 这里一样,找不到关于setElementConverter的信息,即使在文档本身和源代码中也是如此。而setElementConverter(来自RemoteWebDriver 类)是protected,所以在他们神秘的“你是否希望......”暗示中,他们似乎也暗示他们的“沿着这条路线”涉及扩展RemoteWebDriver 并调用@ 987654331@ 来自子类中的某处。
  • @bandeesh-r-sirga 如果这是一个 XY 问题,而您实际上只是在尝试使用 Selenium 进行工作,那么您需要在元素过时后重新找到它。如果您再次收到 StaleElementException,driver.findElement(By) 并且该元素将不再是陈旧的。如果 DOM 树在该节点或其上方的层次结构中发生更改,则元素会“过时”。再次找到该元素会满足您的需求,还是您绝对必须处理您最初找到的相同陈旧元素?

标签: java selenium-webdriver


【解决方案1】:

我认为您可能会因为关注setElementConverter 而走错路。正如documentation page you linked 所建议的那样,如果该元素过时,您应该尝试再次查找该元素。

如果元素已被相同的元素替换,一个有用的策略是再次查找该元素。

我认为,如果您是 Selenium 初学者,您应该遵循此建议并在此停止。 Try-Catch 过时的元素异常,然后再次找到该元素,而不用担心setElementConverter


如果您正在研究 Selenium 的更高级行为,或者一心想要满足您对 setElementConverter 的好奇心,那么以下几行将更重要。

如果您自动执行此操作,请注意您很可能会将测试打开到竞争条件和潜在的脆弱性。

...

如果你想沿着这条路线走下去,最简单的挂钩点是调用 setElementConverter。

文档说您可以尝试编写一些聪明的东西 以便自动重复查找元素,但这会导致不稳定和竞争条件。我认为实际上没有人试图以这种方式克服 StaleElementExceptions,因为它既复杂又不稳定,最简单的解决方案是在您自己的代码中重新找到该元素。

正如@SantiBailors 在他的评论中指出的那样,setElementConverter 是RemoteWebDriver 中的protected 方法。

看起来您将扩展 RemoteWebDriver 并将其他行为注入到 setElementConverter 的“挂钩”中,或者提供您自己的 JsonToWebElementConverter 以更改该行为以自动重试或处理陈旧的元素。

你会怎么做,我不确定。我的知识就到此为止了,而且我从未听说有人接受这个建议来联系setElementConverter。再次,我想重申这可能不是您想要做的,并且很可能您只是想在自己的代码中再次找到该元素,这可以通过使用 try-抓住 StaleElementException 并在一些 ThreadSleep 或 WebDriverWait 之后重试。

【讨论】:

    【解决方案2】:

    您不能直接访问RemoteWebDriversetElementConverter 方法,因为它受到保护。它可以通过扩展 webdriver 来使用。

    如何使用setElementConverter 的示例之一是在QAFQAFExtendedWebDriver 中,其中QAF 扩展了webdriver 和webelement 以具有listeners、内置assertion, verificationwait 等附加功能, self-descriptive locator 等等。

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 2013-02-13
      • 2018-06-13
      • 1970-01-01
      相关资源
      最近更新 更多