我正在使用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”未找到 ,则控制台会挂起而不返回任何内容。我的猜测是我需要实现某种计时器来强制脚本放弃搜索元素,但我希望它能动态地解决这个问题(取决于解释页面需要多长时间)。
任何有关使这个循环工作的帮助都将非常感激。
答案 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秒后仍然没有找到所需的元素,则页面应该刷新。
我希望这会有所帮助