刷新Webdriver页面直到显示元素

时间:2012-12-17 15:02:00

标签: ruby selenium-webdriver

我正在使用Selenium-Webdriver在Ruby中编写脚本,并且一直在尝试创建一个循环来刷新当前页面,直到存在某个元素id。我当前的代码如下所示:

until driver.find_element(:id => "test").displayed?
 puts "#{driver.title} not live - reloading..."
 driver.navigate.refresh
end

然而,当执行时,这会使整个脚本停止而不刷新页面(但不会抛出任何错误)。我尝试用driver.navigate.refresh代替driver.get "http://website",但我得到的结果相同。

为了诊断问题,我试图看看我的第一行是什么。当找到id为“test”的元素时,puts driver.find_element(:id => "test").displayed?将向控制台返回“true”。如果元素“test”未找到 ,则控制台会挂起而不返回任何内容。我的猜测是我需要实现某种计时器来强制脚本放弃搜索元素,但我希望它能动态地解决这个问题(取决于解释页面需要多长时间)。

任何有关使这个循环工作的帮助都将非常感激。

1 个答案:

答案 0 :(得分:1)

我会替换

driver.navigate.refresh 

driver.navigate.to "http://page to refresh"

有点蛮力,但它不应该以这种方式停止剧本。

我还会添加一个wait命令,这样你就不会进入某种无限循环。

wait = Selenium::WebDriver::Wait.new(:timeout => 30)
wait.until{driver.find_element(:name, 'test')}

如果在3秒后仍然没有找到所需的元素,则页面应该刷新。

我希望这会有所帮助