1

Capybara-webkit を使用して、ヘッドレス モードで簡単な Google 検索テストを実行しようとしています。

env.rb ファイルのようにドライバーを設定しました。

Capybara.default_driver = :webkit
Capybara.current_driver = :webkit
Capybara.javascript_driver = :webkit

また、機能ファイルには、入力を検索し、結果に期待される出力が含まれているかどうかを検証する簡単なシナリオの概要が含まれています。

    Given User opens the google page
    When she searches for "<input>"
    Then verify that the result has "<output>"

    Examples:
    |input                    | output           |
    |Agile Samurai author name|Jonathan Rasmusson|
    |Eloquent Ruby author name|Russ Olsen        |

ステップ定義では、Googleページにアクセスしてテキストボックスに入力し、検索ボタンをクリックします。

Given /^User opens the google page$/ do
  visit "http://google.com"
end

When /^she searches for "(.*?)"$/ do |search_query|
        fill_in "gbqfq", :with => search_query
        click_button "gbqfba"
end

Then /^verify that the result has "(.*?)"$/ do |output|
        should have_content output
end

これらのテストを実行すると、次のエラーが表示されます。

フィールド "gbqfq" が見つかりません (Capybara::ElementNotFound)

ただし、ドライバーをセレンに変更すると、次のようになります。

Capybara.default_driver = :selenium
Capybara.current_driver = :selenium
Capybara.javascript_driver = :selenium

次に、テストが実行され、すべてのステップがパスします。

ヘッドレス モードでは、要素は別の方法で検出されますか? 私のアプローチは間違っていますか?ブラウザー モード (Firefox インスタンスを開く) で正常に動作するのに、ヘッドレス モードで要素が見つからない理由を理解できません。

私はこの分野の初心者なので、どんな助けでも大歓迎です。前もって感謝します。

4

2 に答える 2

2

を使用してソースコードを印刷しましたputs page.html。ヘッドレスモードのソースコードが違うことがわかりました。

これは、ブラウザ モードのテキスト ボックス ソース コードの一部です。

<input id="gbqfq" class="gbqfif" type="text" value="" autocomplete="off" name="q">

これは、ヘッドレス モードのテキスト ボックス ソース コードの一部です。

<input class="lst" spellcheck="false" dir="ltr" title="Google Search" value="">

ID がヘッドレス モードのソース コードに存在しないため、テストは失敗します。両方のモードで共通の名前がある場合は、それをテストに使用します。

なぜこれが起こるのかわかりません。ただし、Google はヘッド モードまたはヘッドレス モードに基づいて異なるページをロードしている可能性があります。

両方のモードで動作するflipkart.comのような他のいくつかのWebサイトを試しました. つまり、ID などは両方のモードで同じです。

したがって、質問のコードに問題はありません。両方のモードに存在する ID を使用する必要があります。

于 2013-01-03T09:23:46.770 に答える
0

ボタンclick_buttonのラインが間違っているようidです。

そのはず:

click_button "gbqfba"

したがって、あなたの行は次のようになります。

fill_in "gbqfq", :with => search_query
click_button "gbqfba"

これが役立つかどうかはわかりませんが、試してみる価値はあります。

于 2013-01-02T06:09:02.783 に答える