0

Я очень новичок в Ruby и разрабатываю скрипты с Watir для приемочных испытаний, и я застрял в колею, что я даже не уверен, что можно выбраться.Ruby Глобальные переменные после обновления браузера

У меня есть небольшой скрипт, который работает, который в основном смотрит на раскрывающийся список, сохраняет все выпадающие элементы в глобальную переменную, которую затем перебираю и запускаю другие функции.

Проблема возникает, когда я пытаюсь обновить браузер после запуска всех функций для каждого элемента раскрывающегося списка, который затем пытается выполнить итерацию следующего элемента раскрывающегося списка и выполнить те же функции до тех пор, пока все раскрывающиеся элементы не будут завершены.

$browser = Watir::Browser.new :chrome 
$wait = Watir::Wait 

def wait_while_loading(what) 
    lightbox = $browser.div(:class , 'lightbox') 

    begin 
     # Capture load start 
     start = Time.now 

     $wait.until { lightbox.present? } 
     $wait.until { !lightbox.present? } 

     # Capture load end 
     finish = Time.now 
     load_time = (finish - start).to_s 
    rescue => e 
     print e.backtrace.join("\n") 
     #log_error('Failed while loading ' + what + '.') 
    end 
end 

def cycle_all_views 
    $views = [] 
    $current_view 

    $view_dropdown = $browser.div(:id, 'views-dropdown') 

    $views = $browser.div(:class, 'dropdown-views').div(:class, 'dropdown-menu--footer').ul(:class, 'dropdown-menu').divs(:class, 'dropdown-menu-item') 

    start_on_view = 10 

    begin 
     $views.drop(start_on_view).each_with_index do |view, i|  
      $view_dropdown.click 

      $current_view = view.text 
      index = i.to_s 
      safe_name = sanitize($current_view) 

      view.click 
      wait_while_loading($current_view) 

      $browser.refresh 
      wait_while_loading('Refreshing Page...') 
     end 
    rescue => e 
     #log_error('Failed to load view ' + $current_view) 
    end 
end 

После запуска $browser.refresh, нажав на $views_dropdown после перебора к следующим view, я поздоровался с ошибкой о том, no implicit conversion of nil into String предполагая при попытке сделать $current_view = view.text. Я теряю все назначения переменных после обновления страницы? Если да, есть ли способ их сохранить?

Если бы кто-нибудь мог указать мне на лучший способ отладки моих сценариев Watir, я хотел бы знать, как облегчить мою жизнь.

Стек след возвращает это:

C:/Ruby23/lib/ruby/gems/2.3.0/gems/watir-webdriver-0.9.3/lib/watir-webdriver/ele 
ments/element.rb:536:in `assert_element_found' 
C:/Ruby23/lib/ruby/gems/2.3.0/gems/watir-webdriver-0.9.3/lib/watir-webdriver/ele 
ments/element.rb:524:in `ensure_not_stale' 
C:/Ruby23/lib/ruby/gems/2.3.0/gems/watir-webdriver-0.9.3/lib/watir-webdriver/ele 
ments/element.rb:503:in `assert_exists' 
C:/Ruby23/lib/ruby/gems/2.3.0/gems/watir-webdriver-0.9.3/lib/watir-webdriver/ele 
ments/element.rb:81:in `text' 
main.rb:55:in `block in cycle_all_views' 
main.rb:52:in `each' 
main.rb:52:in `each_with_index' 
main.rb:52:in `cycle_all_views' 
main.rb:122:in `block in <main>' 
main.rb:112:in `each' 
main.rb:112:in `<main>'Failed to load view First View 
+0

Пожалуйста, разместите stacktrace вашей ошибки. – DiegoSalazar

+0

След стека отправлен на исходное сообщение. – ascendantofrain

+0

, и я абсолютно люблю отладчика Rubymine для работы с UI-тестами. – titusfortner

ответ

0

Вот пример, который демонстрирует проблему (который - предоставлять кредит, если кредит причитается - идентифицирован titusfortner):

require 'watir-webdriver' 
b = Watir::Browser.new :chrome 
b.goto('http://www.iana.org/domains/reserved') 

first_link_from_divs = b.div(id: "sidebar_left").links.first 
first_link_from_divs.text          #=> Overview 
first_link_from_divs.exists?         #=> true 

just_a_link = b.link(text: "Overview") 
just_a_link.text            #=> Overview 
just_a_link.exists?            #=> true 

b.refresh 
first_link_from_divs.exists?         #=> false 
just_a_link.exists?            #=> true 
Смежные вопросы