【发布时间】:2018-04-08 16:32:15
【问题描述】:
我有一种情况,我想等到一个元素不再是 STALE,即直到一个元素连接到 DOM。以下等待选项不起作用:
self.wait.until(EC.visibility_of_element_located((By.ID, "elementID")))
self.wait.until(EC.presence_of_element_located((By.ID, "elementID")))
它的相反等待函数存在,它一直等到一个元素变得陈旧,即:
self.wait.until(EC.staleness_of((By.ID, "elementID")))
但我希望它等到元素不再陈旧,即直到它连接到 DOM。我怎样才能实现这个功能?
编辑:这里有一个解决方案:here 但我正在寻找任何其他更好的方法。
【问题讨论】:
-
一旦元素为
no longer STALE,您的下一步操作/步骤是什么? -
我很困惑。 “陈旧”对我来说意味着该元素以前存在但现在消失了。所以,“不再陈旧”对我来说没有任何意义?!我认为它应该按照建议的答案工作(使用
presence_of_element_located)。如果没有,则有其他问题。该站点是使用 java 还是其他可以动态更改它的站点?出于测试目的:如果您构建一个静态的极长等待时间(比如 120 秒),它是否有效? -
@nostradamus 的“不再陈旧”我的意思是该元素现在已连接到 DOM。是的,我使用了 time.sleep() 来使代码工作,但我想在不使用 time.sleep() 函数的情况下实现它。
-
我希望我的系统更准确地等待一个元素附加到 DOM @DebanjanB。之后我想选择它的文本属性。
-
您必须识别正在更改/更新元素的代码段,这会导致其陈旧。它很可能特定于您正在查看的页面,因此我们无法为您提供帮助。一个肮脏的解决方案怎么样:
try ... except,如果元素陈旧,则捕获错误,等待 1 秒,重复此操作直到成功?
标签: python unit-testing selenium automation python-unittest