2015-07-02 5 views
0

Когда мой код работает в select_to_city(to),спасательное не поймать ошибку «Selenium WebDriver :: :: Ошибка»

Я предполагаю, что это будет перерыв на Selenium::WebDriver::Error

Но это не помешало бы спасение, почему?

class Tiger123 < ClassTemplate 
    def form_action(from, to, flight_date) 
     begin 
     select_to_city(to) 
     select_depart_date(flight_date) 
     rescue Selenium::WebDriver::Error => e 
     binding.pry 
     rescue Exception => e 
     binding.pry 
     end 
    end 


def select_to_city(to) 
    @driver.find_element(:id, "selDestPicker").click 
    @driver.find_element(:id, to).click  
end 

UPDATE

Наконец я добавил rescue в функции select_to_city

И он сделал работу. Я не понимаю, почему это не спасало в form_action методы

def select_to_city(to) 
begin 
@driver.find_element(:id, "selDestPicker").click 
@driver.find_element(:id, to).click   
rescue Exception => e 
    binding.pry 
end 
end 
+0

Вы предполагаете, что он сломается? Имеет ли это? Если он делает то, что генерирует исключение, потому что независимо от того, что оно будет спасено с помощью «Исключения», если оно на самом деле не создает исключение. – engineersmnky

+0

@engineersmnky я уверен, что спасение вообще не работает. потому что я остановился на первой точке останова перед select_to_city (to), затем «продолжить», затем он не остановился на «точке останова» после 'select_depart_date (flight_date)' – newBike

ответ

0

Спасая Selenium::WebDriver::Error не работает, потому что исключение не из этого класса. Selenium::WebDriver::Error - это только модуль, который включает различные типы ошибок.

Во время спасения общей Exception, вы можете увидеть класс исключений и его предков, используя в ancestors метод:

rescue Exception => e 
    p e.class.ancestors 
    #=> [Selenium::WebDriver::Error::NoSuchElementError, Selenium::WebDriver::Error::WebDriverError, StandardError, Exception, Object, Kernel, BasicObject] 
end 

Первый элемент массива является класс, за исключением, которая случается специфическая ошибка в селене. Следующий элемент, Selenium::WebDriver::Error::WebDriverError, является родительским классом, из которого наследуются все исключения Selenium. Именно этот родительский класс вы хотите спасти:

def form_action(from, to, flight_date) 
    begin 
    select_to_city(to) 
    select_depart_date(flight_date) 
    rescue Selenium::WebDriver::Error::WebDriverError => e 
    binding.pry 
    end 
end