1

Selenium Grid 2 テスト中に ID を識別できるようにするために、ID を SelectItem (より正確にはオプション リスト) に設定しようとしていますが、それを行う方法が見つかりません。必要なのは、リストを見つけてその値を選択 (クリック) することです。

試行錯誤したインテント:

  1. この目的のための通常のメソッドでsetID()ありensureDebugId()、SelectItem では使用できません
  2. このメソッドsetName()は、生成された HTML に痕跡を残しません。
  3. SelectItem を含むフォームでオプション リストを見つけることができません。SelectItem は、個別の要素で構成されます。

    • ラベル(タイトル)
    • textInput (選択した値)
    • ピッカー(オプションのドロップダウン リストを表示するボタン)
    • pickList (オプションのドロップダウン リスト)

    ローカライズするために、このコンポーネントを含むフォームに ID を設定すると、 pickListclassNameを見つけることができません。これは、ピッカーがクリックされたときに生成され、生成されたコードがフォームの境界の外に配置されるためです。フォーム内で見つかりません。ドキュメント全体で見つけることは可能ですが、複数のリストがある場合、どのリストがどの SelectItem に属しているかを知る方法はありません。

どんなアドバイスでも大歓迎です。前もって感謝します。

更新: 誤解を避けるために何かを明確にしたいと思います: さまざまな Selenium ツールとバージョン、およびそれを Smart GWT で使用する最良の方法について、さまざまな意見があることを知っています。この質問は、これらの議論には参加していません。質問のタイトルに示されている境界に限定されています: Selenium Grid 2 tests with WebDriver.

setID()いくつかの背景: GWT コンポーネントをコーディングするとき、テスト目的でメソッドを使用して (慎重に、重複しないように) それらの一部を識別します。これらの識別子が結果の HTML で読み取られるかどうかは気にしません。(使用ensureDebugId()すると何らかの理由でビューが歪んでしまいます。その上、とにかく、同形の人たちはそれを忘れることをお勧めします。) しかし、はsetID()利用FormItemできません。つまり、最初の空でないオプションが選択されます。SelectItemFormItem

4

2 に答える 2

1

私が見つけたのはSelectItem、ピッカーのアイコン名を設定できることです。

selectItemInstance.setPickerIconName("someName");

この名前は、後で生成された HTML に表示されます。そこで、 の場合と同様に、それを利用してこの方法で ID を割り当てることにしましたsetID()。メソッドを使用すると、後で次の手順に従って、この名前WebDriverで要素を見つけることができます。SelectItem

SelectItem1) ID でフォーム (内部に要素がある) を見つける

SelectItem2)フォーム内のすべての要素を見つける

formElement.findElements(By.className("selectItemControl"));

3) 割り当てられた ID と等しい pickerIconName を持つものを選択しますsetPickerIconName()(見つかった要素をループします)。

selectItemElement.findElement(By.xpath("//*[@*='" + pickerIconNameID + "']"));

4) 見つかったら、それをクリックしてオプション リストを生成します。

pickerElement.click();

注:オプション リストは、要素を最初にクリックする前ではなくSelectItem生成され、表示されたままになり、表示から非表示に変わります。生成されると、対応する を含むフォームの境界からはみ出しSelectItemます。ウィンドウに複数の要素がある場合(可能性が高い)、正しいオプション リストSelectItemを見つける必要があるため、これは問題になる可能性があります。それを見つけるために、いくつかの基準が適用される場合があります。オプション リストの場所は、最も簡単で最も信頼できるものとして選択しました。要素に「くっつく」オプション リストが正しい場所である必要があります。SelectItem

5) ウィンドウ上のすべてのオプション リストを見つけます。

driver.findElementsByClassName("pickListMenuBody")

6) の正しいオプション リストを選択しますSelectItem:のgetLocation()およびgetSize()メソッドを使用して、見つかったオプション リストのどれがステップ 2 および 3 で見つかった要素 ("selectItemControl")WebElementと交差/接触しているかを確認します。SelectItem

それだけです。ここからは、おそらく複数回行ったように、「listTable」(オプション リスト要素、つまり「pickListMenuBody」内に含まれる) で必要な項目を選択するだけです。

要素を検索するときはロード時間を考慮に入れ、ユーティリティ/インフラストラクチャ コードをテスト コードから分離しておくことを忘れないでください。そうしないと、混乱が生じます。

これは最も洗練されたソリューションではありませんが、私たちにとってはうまくいきます。GWT チームと Selenium チームがいずれより良いものを提供してくれると確信しています。

コメントや提案 (Selenium Grid 2 の使用に限定) を歓迎します。ありがとうございました。

于 2013-06-12T13:18:30.550 に答える