什么是setElementConverter,它在Selenium WebDriver中是如何工作的?

2022-09-02 11:03:14

我在查找页面刷新的元素时遇到问题。现在尝试对元素投掷执行任何操作,并显示一条消息StaleElementReferenceExceptionElement is no longer valid

查找此网址

在上面的引用网址上有一个关于以下内容的说明

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

使用什么或如何使用?谷歌搜索了一下,找不到所提到方法的实际实现。setElementConverter


答案 1

我认为您可能通过专注于.正如您链接的文档页面所建议的那样,如果它过时,您应该再次尝试查找该元素。setElementConverter

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

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


如果您正在研究硒的更高级行为,或者已经完全满足了您的好奇心,那么以下几行将更为重要。setElementConverter

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

...

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

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

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

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

你会怎么做,我不确定。这就是我的知识结束的地方,我从未听说过有人接受这个建议来吸引.再一次,我想重申,这可能不是你想做的,而且很可能你只是想在自己的代码中再次找到这个元素,这可以通过使用try-catch来完成,然后在一些ThreadSleep或WebDriverWait之后重试。setElementConverterStaleElementException


答案 2

您无法直接访问 的方法,因为它受到保护。它可以通过扩展网络驱动程序来使用。setElementConverterRemoteWebDriver

如何使用的示例之一是在QAF的QAFExtendedWebDriver中,其中QAF扩展了webdriver和webelement,以具有其他功能,例如侦听器,内置断言,验证等待自我描述定位器等。setElementConverter


推荐