我认为您可能通过专注于.正如您链接的文档页面所建议的那样,如果它过时,您应该再次尝试查找该元素。setElementConverter
如果该元素已被替换为相同的元素,则一个有用的策略是再次查找该元素。
我认为,如果您是Selenium的初学者用户,则应遵循此建议并在此处停止。尝试捕获过时的元素异常,然后再次找到该元素而不用担心。setElementConverter
如果您正在研究硒的更高级行为,或者已经完全满足了您的好奇心,那么以下几行将更为重要。setElementConverter
如果您自动执行此操作,请注意,您很可能正在将测试打开到竞争条件和潜在的片状。
...
如果你想沿着这条路走下去,最简单的钩子点是调用setElementConverter。
文档说,您可以尝试编写一些聪明的东西,以便自动重复元素的查找,但这会导致片状和竞争条件。我不认为在实践中有人真的试图以这种方式克服StaleElementExceptions,因为它既复杂又片状,最简单的解决方案是在你自己的代码中重新找到元素。
正如@SantiBailors在他的评论中指出的那样,setElementConverter是.protected
RemoteWebDriver
看起来你可以扩展 RemoteWebDriver 并将其他行为注入 setElementConverter 的“钩子”中,或者提供你自己的行为来更改该行为以自动重试或处理过时的元素。JsonToWebElementConverter
你会怎么做,我不确定。这就是我的知识结束的地方,我从未听说过有人接受这个建议来吸引.再一次,我想重申,这可能不是你想做的,而且很可能你只是想在自己的代码中再次找到这个元素,这可以通过使用try-catch来完成,然后在一些ThreadSleep或WebDriverWait之后重试。setElementConverter
StaleElementException