为什么我的救援挡不起作用?

时间:2012-11-08 18:46:04

标签: ruby selenium-webdriver rescue pageobjects

我正在使用selenium webdriver并尝试让页面对象在报告测试失败之前多次查看页面。我的问题是我得到的错误没有被我的开始救援区抓住 这是错误

Selenium :: WebDriver :: Error :: NoSuchElementError:无法找到元素:{“method”:“id”,“selector”:“不存在”}

class ManageMembers < Nav

  def initialize
    super
    ready = false # Used to indicate if all elements expected are present 
    tryCount = 0# A counter to track the number of attempts to 
    while(ready == false)
      puts "initalizing managemembers"
      #things on the side menue 
      begin
        $driver.find_element(:id, "does not exist")
        $driver.find_element(:id, "sidebar")
        $driver.find_element(:id, "sidebar").find_element(:link, "Manage Members")
        $driver.find_element(:id, "sidebar").find_element(:link, "Create Member")
        @sidebar = true
      rescue @sidebar = false
      end

2 个答案:

答案 0 :(得分:1)

将此作为答案添加,以便我们将此问题标记为已回答。

class ManageMembers < Nav
  def initialize
    super
    ready = false # Used to indicate if all elements expected are present 
    tryCount = 0# A counter to track the number of attempts to 
    while(ready == false)
      puts "initalizing managemembers"
      #things on the side menue 
      begin
        $driver.find_element(:id, "does not exist")
        $driver.find_element(:id, "sidebar")
        $driver.find_element(:id, "sidebar").find_element(:link, "Manage Members")
        $driver.find_element(:id, "sidebar").find_element(:link, "Create Member")
        @sidebar = true
      rescue Exception => e 
        @sidebar = false
      end

答案 1 :(得分:0)

当您使用块语法(begin ... rescue ... end)而不是内联语法(do_something rescue recover_from_something)时,您需要将救援语句放在下一行。现在你正在混合两种语法风格。

begin
  $driver.find_element(:id, "does not exist")
  $driver.find_element(:id, "sidebar")
  $driver.find_element(:id, "sidebar").find_element(:link, "Manage Members")
  $driver.find_element(:id, "sidebar").find_element(:link, "Create Member")
  @sidebar = true
rescue
  @sidebar = false
end

如果您完全拯救begin ... end块(使其成为一个完整的声明),但这看起来糟糕,这不适用,我建议使用完整块语法:

begin
  $driver.find_element(:id, "does not exist")
  $driver.find_element(:id, "sidebar")
  $driver.find_element(:id, "sidebar").find_element(:link, "Manage Members")
  $driver.find_element(:id, "sidebar").find_element(:link, "Create Member")
  @sidebar = true
end rescue @sidebar = false

再次,不要做最后一点;)