12

先月 (2013 年 6 月) に、主にクリックしようとしているボタンが表示されないために、いくつかの Capybara テストが失敗し始めました。理想的には、何が変わったのかを把握したいと思います。現在、selenium-webdriver 2.33 を使用していますが、2.29 に戻そうとしましたが、まだ機能しません。現時点では Firefox に対してのみ実行していますが、これは Firefox の新しいバージョンが原因である可能性があります。

それがなければ、ボタンをスクロールして表示する方法がわかりません。私が収集したものから、scrollIntoView を使用できますが、カピバラのステップでそれを呼び出す方法がわかりません。私はバリエーションを試しました:

 Capybara.current_session.driver.execute_script("arguments[0].scrollIntoView(true;)", find_button(button).native)

しかし、find_button 自体が機能しないため、うまくいきません。

注: ボタンのテキストに基づいて選択しています。ID に基づく選択は可能ですが、UI テストに多くの変更が必要になるため、避けたいと考えています。

4

3 に答える 3

31

通常JavascriptDriver、テストに Selenium の機能を含めるために使用するモジュールがあり、そこでヘルパー メソッドを定義します。

module JavascriptDriver
  # other code that prepares capybara to work with selenium

  def scroll_to(element)
    script = <<-JS
      arguments[0].scrollIntoView(true);
    JS

    Capybara.current_session.driver.browser.execute_script(script, element.native)
  end
end

そして、テストで通常の Capybara 要素を渡すことで、そのコードを利用できます。

scroll_to(page.find("button.some-class", visible: false))
于 2016-06-28T20:42:07.727 に答える
3

これは、Selenium と Chrome で見られるスクロール バグです。修正はhttps://stackoverflow.com/a/11048669/1935918です

于 2014-12-15T19:44:37.057 に答える
1

ページはスクロールできないため、他の回答で提供されているリンクされた回答と同じアプローチを使用できますが、スクロール可能な要素を対象とするバリエーションがあります。たとえば、スクロール可能な要素の ID が「scrollable」の場合:

page.execute_script "document.getElementById("scrollable").scrollTop += 100"

私は個人的にテストのためにスクロールする必要があるのが嫌いなので、Capybara + Selenium のこれに対するより良い解決策を誰かが思いついたら、ぜひ見てみたい.

于 2016-06-09T21:01:13.787 に答える