0

さまざまな構成項目の入力フィールドを保持するいくつかのタブを持つ複雑なデータ入力フォームを備えた Web アプリがあります。さまざまなタブのフィールドにデータを入力してから保存を実行するテストを書いています。各項目を入力するたびに、データ入力コントロールに選択したテキストまたは値があることを確認してから、次のステップに進みます。常にではありませんが、別のタブに移動すると、前のタブのフィールドに入力したデータが失われることがあります。

これを防ぐにはどうすればよいですか?

Java で WebDriver を使用して Selenium 2 を使用し、Firefox でテストを実行しています。

次の 2 つのフィールドで問題が発生しています。

1 つは単純なテキスト入力フィールドです 2 つ目はオートコンプリート機能を備えたテキスト入力ボックスです

どちらのフィールドも、タブを切り替える前にデータを入力する最後のフィールドです。タブを切り替える前にデータを入力した他のフィールドのデータが失われることはありません。新しいタブに移動する直前にやり取りするものだけです。

テキストを入力フィールドに送信するメソッドの最後に JQuery がロードされていることを確認しようとしましたが、役に立たないようです。JQuery をチェックするメソッドは true を返し、データはまだ時々消去されます。

これは、手動でデータを入力する場合には発生しません。また、データが 1 つのタブのみに入力される別の自動テストでも発生しません。

テキストが入力され、オートコンプリートをトリガーした保留中の入力がない場合のオートコンプリート フィールドの html は次のとおりです。

<div id="s2id_autogen5" class="select2-container select2-container-multi select2">
    <ul class="select2-choices" style="">
        <li class="select2-search-choice">
            <div>
                htm
            </div>
            <a class="select2-search-choice-close" tabindex="-1" onclick="return false;" href="#"></a>
        </li>
        <li class="select2-search-field">
            <input class="select2-input" type="text" autocomplete="off" tabindex="0" style="width: 10px;"></input>
        </li>
    </ul>
</div>

単純なテキスト入力フィールドの HTML ソースは次のとおりです。

<td class="optionValue option_sr_test_object_url">
    <input id="option_d03e6450-5990-4a31-8e84-5b1af89d2c47_sr_test_object_url" type="text" placeholder="e.g. /path/testobject.html" value="/path/test.html">
    </input>
</td>
4

2 に答える 2

0

私は最終的に、これが起こるのを確実に防ぐ何かを見つけました:

driver.switchTo().window(driver.getWindowHandle());

タブを切り替える前にその行を実行すると、以前に入力したデータが消去されませんでした。なぜこれが機能するのかわかりません。また、これを解決策として見つけた方法も覚えていません。この回答でこの質問を更新することを何ヶ月も意味していましたが、それを忘れていました。

于 2014-08-07T20:15:50.703 に答える
0

これに数日間苦労した後、問題の部分的な解決策があります。

単純なテキスト入力ボックスの場合、 Keys.TABを送信してフォーカスを次の入力フィールドに変更すると、通常、フォームの別のタブに切り替えてもデータは消去されません。sendKeys のみを使用してテキストを入力した場合は発生しない別のフィールド (別のタブではなく) にフォーカスが切り替わったときに発生するイベントが必要です。ただし、場合によっては、データが時々消えることがあります。

オートコンプリート機能を使用した入力では、Keys.RETURN または Keys.TAB を送信してテキストをフィールドに正しく入力する必要がありました。このフィールドでは、オートコンプリート リストからオプションを選択するか、Enter キーまたは Tab キーを押して、オートコンプリート オプションのいずれにも一致しないテキストを入力できます。Keys.RETURN または Keys.TAB でテキストを入力した後、Keys.TAB を送信してフォーカスを別のフィールドに変更する必要がありました。繰り返しますが、データを保持するために発生する必要があるイベントであり、そのイベントはフォーカスが別の入力フィールドに変更された後にのみ発生すると思いますが、タブを切り替えても発生しません。

JQuery にアクティブなリクエストがないことを確認しても役に立ちません。アクティブなクエリがない場合でも、フィールドの一方または両方からデータが時折消えることがあるためです。

すべての状況でこの問題を解消する、本当に簡単な方法が必要です。スリープをハードコーディングする必要はありません。コード化されていない方法で適切な待機を設定するためのより良い手法があるでしょうか? この解決策は絶対確実ではないため、これを質問に対する答えとして受け入れることはできないため、私は自分の問題に対する完全な解決策を望んでいます。

于 2013-06-21T15:26:31.600 に答える