0

私は Ruby に非常に慣れておらず、受け入れテストのために Watir を使用してスクリプトを開発しています。

基本的にドロップダウンリストを見て、すべてのドロップダウンアイテムをグローバル変数に保存し、それを繰り返して他の関数を実行する小さなスクリプトを実行します。

この問題は、ドロップダウン項目ごとにすべての関数を実行した後にブラウザーを更新しようとすると発生し、次のドロップダウン項目に反復して、すべてのドロップダウン項目が完了するまで同じ関数を実行しようとします。

$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_dropdownviewno 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
4

2 に答える 2