Защо моят спасителен блок не работи?

Използвам 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

person Zach    schedule 08.11.2012    source източник
comment
бихте ли опитали да поставите rescue Exception => e и @sidebar = false на следващия ред?   -  person sunnyrjuneja    schedule 08.11.2012


Отговори (2)


Добавяне на това като отговор, за да можем да маркираме този въпрос като отговорен.

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
person sunnyrjuneja    schedule 08.11.2012

Когато използвате блоковия синтаксис (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

Отново, не правете това последното ;)

person Kamiel Wanrooij    schedule 08.11.2012