【发布时间】:2016-10-11 09:00:09
【问题描述】:
我有以下代码:
wait.until {driver.find_element(:xpath, "//input[@class='btn btn-success Testserver']")}
element = driver.find_element(:xpath, "//input[@class='btn btn-success Testserver']")
element.click
wait.until {driver.find_element(:xpath, "//input[@class='btn btn-success Testserver2']")}
element = driver.find_element(:xpath, "//input[@class='btn btn-success Testserver2']")
element.click
我的问题是第 3 行和第 4 行。当 selenium 单击第一个元素时,会导致页面重新加载。问题是第 4 行(wait.until)在执行重新加载之前找到了元素。那么会发生什么? Selenium 认为元素已经加载,它会尝试继续,然后页面重新加载,selenium 抛出错误,导致找不到元素。
Selenium::WebDriver::Error::StaleElementReferenceError: The element reference is stale. Either the element is no longer attached to the DOM or the page has been refreshed.
我能做什么?当我在这行之间设置睡眠时,代码工作正常,但我不想使用睡眠错误的做法。还有其他方法吗?
感谢您的帮助!
【问题讨论】:
-
也许您还需要在第二个
wait.until块中检查文档是否准备就绪。
标签: ruby-on-rails ruby selenium selenium-webdriver