0

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

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

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

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

任何有关使此循环正常工作的帮助将不胜感激。

4

1 回答 1

1

我会替换

driver.navigate.refresh 

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

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

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

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

如果 3 秒后仍未看到所需元素,则页面应刷新。

我希望这有帮助

于 2012-12-17T15:21:23.593 回答