1

私はこのシナリオを持っています:

Scenario: If coming from savsale.com directly then the submenu items should open the right items.
  Given the 'sales' page
  When the user chooses 'women/accessories' from the navigation menu

そしてこのステップ:

When /^the user chooses '(.*?)\/(.*?)' from the navigation menu$/ do |menu,submenu|
  begin
    evaluate_script(%Q{console.debug('trying to show the menu:');})
    command1 = "$('##{menu} ul').attr('style','display:block;visibility:visible');"
    evaluate_script(%Q{console.debug("#{command1}");})
    evaluate_script(command1)
    evaluate_script(%Q{console.debug('first command done.');})
    command2 = "$('##{menu}').addClass('sfHover');"

私はセレンウェブドライバーも使用しています:

Capybara::Selenium::Driver.new(app, :browser => :firefox) 

javascriptの実行はこのコードに到達しません:

evaluate_script(%Q{console.debug('first command done.');})

Firefoxコンソールでは、これが表示されます。

$('#women ul').attr('style','display:block;visibility:visible');

しかし、これはそうではありません:

first command done.

execute_script(command1)で停止し、タイムアウト例外で失敗すると思います...:

When the user chooses 'women/accessories' from the navigation menu # features/step_definitions/steps.rb:193

  Timeout::Error (Timeout::Error)

誰か良い考えがありますか?

4

1 に答える 1

2

OMG、しばらくして、試したページから返されたオブジェクトに execute_script があり、それが機能することに気付きました... OMG ...すべてのjavascriptが実行されました...

When /^the user chooses '(.*?)\/(.*?)' from the navigation menu$/ do |menu,submenu|
  begin
    sleep 10.seconds #wait for the js to load the menus
    page.execute_script(%Q{console.debug('trying to show the menu:');})
    command2 = "$('##{menu}').addClass('sfHover');"
    page.execute_script(command2)
    command1 = "$('##{menu} ul').attr('style','display:block;visibility:visible');"
    page.execute_script(command1)
    command3 = "$('a[filter-category=#{menu}][filter-sub-category1=#{submenu}]')[0].click();"
    page.execute_script(command3)
    rescue Capybara::NotSupportedByDriverError
  end
end
于 2012-08-14T07:42:49.340 に答える