【发布时间】:2014-04-09 19:53:30
【问题描述】:
好的,我尝试解释这个我自己还没有弄清楚的问题。我正在将 Selenium 与 python 绑定一起使用,并且在使用 WebDriverWait 后跟 click() 事件时似乎随机找不到页面元素的问题。这是我的代码:
yearOption = WebDriverWait(self.br, 40).until(lambda d: d.find_element_by_xpath("//select[@name='ctl00$holdSection$rptCommissionYears']/option[@value='%s']" % year), self.br)
print yearOption.text
yearOption.click()
这个命令集在一个 for 循环中,并且会在 .click() 事件上随机失败,产生错误:StaleElementReferenceException() 在打印 yearOption.text 之后。这对我来说完全很奇怪,因为WebDriverWait 行显然找到了该元素,并且在单击该元素之前我没有重新加载或更改浏览器状态...
任何想法为什么我会收到此错误?请记住,它不会始终如一地发生,事实上——有时,我的整个脚本会成功执行而没有错误。
【问题讨论】:
-
你说这是一个for循环,所以我假设Click正在执行一些javascript?如果是这种情况,我会确保所有 javascript 在循环的下一次迭代之前完成执行。如果动态地从 DOM 中添加/删除元素,这可能会导致 StaleElementException,即使它不是正在添加/删除的元素
-
@SteveCrawford 不,没有被点击的 javascript。单击是从选择(下拉)框中单击一个选项;如果你认为 javascript 那么这将是循环中唯一的 javascript 执行......没有其他东西是重定向页面或更改浏览器对象......
-
您找到解决方案了吗?
标签: python selenium selenium-webdriver