开发人员将代码更改为使用onclick() DOM元素而不是url。所以,现在我需要一直重新加载页面,以防止它变得陈旧。我如何用一个find_elements_by_xpath来完成这个任务呢?我想是document.*.submit()需要DOM吧?
onclick():document.Forceee0deabfba2341d2a0988779499f5530.submit(),https://localhost:4778/ruleengine/AlarmTest?category=Alert#,文本:(强制)
旧代码现在失败了:
driver.get(alarmurl)
elems = driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]")
for el in elems:
el.click()我目前的解决办法是在每次点击后重新加载页面,但是我们可能有3000个事件要删除,这使得它非常慢。
driver.get(alarmurl)
elems = driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]")
while len(elems) > 0:
driver.get(alarmurl)
elems = driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]")
elems[0].click()谢谢
发布于 2017-11-27 17:02:46
我不认为你需要重新加载整个页面,如果你遇到StaleElementReferenceException,但我可能也错了。当元素不再附加到DOM时,再次搜索该元素以引用该元素
下面的代码可能无法解决您的问题,但应该有助于您开始实现更好的解决方案。
driver.get(alarmurl)
elems = driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]")
for el in elems:
try:
el.click()
except StaleElementReferenceException:
# find the element again and click发布于 2017-11-27 17:05:33
您可以如下所示修复代码:
driver.get(alarmurl)
# get initial events number
elems_count = len(driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]"))
# execute click() for each event
for _ in range(elems_count):
driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]")[0].click()您可能还需要等待,直到每次单击1后事件数减少,以防事件移除太慢……或采用另一种方法:
driver.get(alarmurl)
# get initial events number
elems_count = len(driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]"))
# execute click() for each event. Starting from the last one
for index in range(elems_count):
driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]")[elems_count - index - 1].click()https://stackoverflow.com/questions/47512791
复制相似问题