1

私のページには、「foo:searchResults12345」のような静的部分 (「foo:searchResults」と動的にレンダリングされたもの - 1 つ以上の数字) で構成される ID がいくつかあります。静的部分「foo」を含むすべての ID を取得したいパターンテキストに正規表現を使用することを考えていますが、問題は、selenium.getAllIdsInPage() など、これを支援するためのメソッドが Selenium Api に見つからないことです。同じ問題と解決策を見つけましたか?

4

2 に答える 2

2

ループと組み合わせgetXpathCountて、各一致を繰り返すことをお勧めします。たとえば、次の xpath を使用すると、一致するノードの総数が返されます。getXpathCount

//*[starts-with(@id, 'foo:searchResults')]

次に、次の例の XPath を使用して、各一致をループできるようにする必要があります。

/descendant::*[starts-with(@id, 'foo:searchResults')][1]

1 は、ループ内の現在のカウントに置き換えられます。

以下は、一致する ID を system.out に出力する Java の例です。

@Test
public void outputDynamicIds() {
    selenium.open("http://www.example.com/");
    int elementCount = selenium.getXpathCount("//*[starts-with(@id, 'foo:searchResults')]").intValue();
    for (int i = 1; i < elementCount+1; i++) {
        System.out.println(selenium.getAttribute("/descendant::*[starts-with(@id, 'foo:searchResults')][" + i + "]@id"));
    }
}
于 2009-11-23T22:08:23.657 に答える
0

もう 1 つの方法は、カスタムの場所戦略を使用することです。現在のプロジェクトでこれを行っていますが、正常に動作します。

特定のケースでは、各要素の id 属性がロケーター文字列 (例の静的部分) で始まるかどうかをチェックするカスタム戦略を作成し、そうであればこの要素を返すことができます。

このアプローチははるかにクリーンだと思います。

于 2011-06-29T12:18:58.303 に答える