Почему мой спасательный блок не работает?

Я использую веб-драйвер selenium и пытаюсь заставить объект страницы просматривать страницу несколько раз, прежде чем он сообщит об ошибке теста. Моя проблема в том, что я получаю сообщение об ошибке, которое не перехватывается моим начальным спасательным блоком.
вот ошибка

Selenium::WebDriver::Error::NoSuchElementError: Не удалось найти элемент: {"метод":"id","селектор":"не существует"}

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