5

実装しようとしている統合テストで「追加」ボタンを押そうとすると、上記のエラーが発生します。それはjavascriptの遅延だと思い、次のことを試しましたが、どれも機能しませんでした:

Then /^I should click "([^"]*)"$/ do |selector|
  # if page.should have_selector(selector)
  # find(selector).click
  # end
  # page.execute_script("$(#{selector}).click()")
  find(selector).click
end

上記のすべてを試しましたが、問題は解決しませんでした。

4

5 に答える 5

5

これはほとんど素晴らしい答えではありませんが、とにかく答えます...

この問題は、Chrome でテストしたときにしか見たことがありません。私のために働いた2つの解決策があります:

  • Chrome の代わりに Firefox を使用する
  • の代わりにfind(selector).clickpage.execute_script("$(#{selector}).click()")

しかし、2 番目のオプションを試してもうまくいかなかったので、代わりに Firefox を使用してみてください。ごめん :(

于 2012-09-14T18:33:02.140 に答える
4

ページの最後にある「保存」ボタンをクリックしようとすると、カピバラで同じエラーが発生しました。JS を使用して要素をスクロールして表示することは、効果的な回避策であることが証明されました。

def scroll_to(element)
  script = <<-JS
  arguments[0].scrollIntoView(true);
  JS
  Capybara.current_session.driver.browser.execute_script(script, element.native)
  element # return the element
end

scroll_to(
  find(:xpath, '//button[text()=\'Save\']')
).click

アップデート


私の場合、インストールされている Chrome と Chromedriver のバージョンが一致していないことが判明し、結局コードの変更は必要ありませんでした。

Chrome 61 以降には、スクロール動作の変更が含まれています。Chromedriver ページを簡単に調べたところ、これらの変更に対応するために、Chromedriver を (2.29 から 2.32 に) アップグレードする必要があることがわかりました。これは、Chromedriver 2.30 (Chrome v59-61 をサポート) リリース ノートの一部です。

  • Chrome 61+ でのページ スクロールの変更により、Chromedriver がクリックに失敗するバグを修正します。
于 2017-09-27T22:30:38.277 に答える
0

Chrome と Firefox の両方で、Selenium がクリックを右のラジオ ボタンに送信するのを妨げていたスティッキー ヘッダーがありました (Poltergeist は正常に機能しましたが)。これはすべての固定要素 (スティッキー ヘッダーなど) を削除するためのハックであり、私にとってはうまくいきました。

def kill_sticky_headers
  # https://alisdair.mcdiarmid.org/kill-sticky-headers/
  script = <<-EOS
  (function () {
    var i, elements = document.querySelectorAll('body *');

    for (i = 0; i < elements.length; i++) {
      if (getComputedStyle(elements[i]).position === 'fixed') {
        elements[i].parentNode.removeChild(elements[i]);
      }
    }
  })();
  EOS
  page.execute_script script
end
于 2016-05-01T21:53:40.950 に答える
-1

2つのチェックボックスを次々にチェックする必要があるという同様の問題に直面していました。しかし、上記と同じエラーが発生していたため、ステップの間にチェックボックスをチェックするための待機を追加しました。それはうまく機能しています。

手順は次のとおりです。

  When I visit /administrator/user_profiles
  And I press xpath link "//*[@id='1']"
  Then I should see "Please wait for a moment..."
  When I wait for 5 seconds
  And I press xpath link "//*[@id='2']"
  Then I should see "Please wait for a moment..."
  When I visit /administrator/user_profiles_updates
于 2012-12-26T09:12:57.903 に答える