什么是setElementConverter以及它在Selenium WebDriver中的工作原理?

Ban*_*rga 18 java selenium-webdriver

我在查找页面刷新的元素时遇到问题.现在尝试对元素执行任何操作,并在下面StaleElementReferenceException添加一条消息Element is no longer valid

抬头看这个网址

有一个音符以上参考网址一下:

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

使用的是什么或如何setElementConverter使用?谷歌搜索了一下,无法找到所述方法的实际实现.

Geo*_*zes 1

我认为你可能会因为专注于而走上错误的道路setElementConverter。正如您链接的文档页面所建议的那样,如果该元素过时,您应该尝试再次查找该元素。

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

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


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

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

...

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

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

正如 @SantiBailors 在他的评论中指出的那样, setElementConverterprotectedRemoteWebDriver.

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

我不确定你会怎么做。我的知识就到此为止了,我从来没有听说过有人接受这个建议来加入setElementConverter. 再次,我想重申,这可能不是您想要做的,并且很可能您只想在自己的代码中再次找到该元素,这可以通过使用 try- 更简单地完成StaleElementException在一些 ThreadSleep 或WebDriverWait后捕获并重试。