-2

Selenium を使用して複雑な Web サービスをテストする必要があります。

問題はid、要素の数がセッションごとに変化していることです。
たとえば、それぞれが接頭辞を持ち、連続した数字で終わる一連の入力があり、開始番号はランダムです (セッションに依存します)。 これらの入力には共通の親がないため、機能しません。\idtextf_id_DComboBox_
nth-child

selector: を使用して最初の入力を見つけることができますcss=input[id^='textf_id_DComboBox_']が、このセレクターに一致する次の項目 (1-7) を見つける方法がわかりません。セレクターを使用する必要があるというスタックオーバーフローに関するいくつかの提案を見つけましたxpathが、ユースケースの例を採用できませんでした。

更新:
最初の入力をキャプチャする代替セレクタもあります: css=td.DForm_treeGridNoWrap input

4

2 に答える 2

1

このXPathを使用して、共通のIDを含むすべての入力を選択できます。

string comboBoxXPath = "//input[contains(@id, 'textf_id_DComboBox')]";
List<WebElement> comboBoxElements = driver.findElements(By.XPath(comboBoxXPath));

この時点で、コレクション全体を反復処理するか、インデックスを使用して操作するコレクションを選択できます。

comboBoxElements[1]
comboBoxElements[2]
comboBoxElements[3]

etc...
于 2012-08-06T20:49:50.867 に答える
0

まあ、その説明はあまり役に立ちません。次のトリックを試すことができます。

  • これらのIDには共通の親がないため、このトリックはおそらく機能しませfindElementん。WebElementしかし、それらがテーブルにラップされている場合、最初にテーブルを見つけることができます:

     WebElement table = driver.findElement(By.id("the-table"));
    

そして、そのようなテーブルですべての入力を見つけるには:

      List<WebElement> inputs = table.findElements(By.tagName("input"));
  • Selenium IDE を firefox にインストールし、それを使用してテストケースを記録してみてください。Selenium IDE でターゲットを操作できます。

  • 汚いアプローチ

       List<WebElement> allInputs = driver.findElements(By.tagName("input"));
    

    そのようなページのすべての入力を検索します。

脚注: コードは Java であり、driver変数は正常なインスタンスと見なされますWebDriver

于 2012-08-06T17:30:07.357 に答える