2017-10-11 1 views
0

私はリモートグリッドでJavaからSeleniumを使用しています。ページ上の要素を見つけたら、この要素から複数の属性を取得したいので、それが表示されているか、それが有効かどうかを確認してください。単一のwebdriver httpコールで複数のコマンドを組み合わせることはできますか?

私が見ることができる限り、私は、新しい遠隔呼び出し(webdriverのhttpエンドポイントへ)を呼び出すことができます。私が興味を持っている値を事前に知っているので、(呼び出しがかなり遅くなる可能性があるので)単一のhttp呼び出しでそれらを組み合わせたいと思っています。これはJavaでSeleniumで可能ですか?それともWebdriverプロトコルでさえ?

明確にする:私の問題は、複数の基準に基づいて1つの要素を見つけることではなく、私はそれを行う方法を知っています。しかし、の後に私は複数のプロパティの値を知りたい要素を見つけました。これらを効率的に集めたいと思います。

私が見ることができる限り、各属性値、テキスト、要素が表示されているかどうか、および有効になっているかどうかを個別に呼び出す必要があります。私にとっては、これは、たとえば、6回の往復で、1回の呼び出しで取得したいすべてのデータを「多重化」できれば十分です。

要素の複数の詳細/プロパティの取得を最適化する方法はありますか?

+0

私はjavascriptの回避策について考えることができますが、セレンのサーバー側からのコマンドをバンドルするものは何もありません –

+0

これらの情報を得ることができる事前定義のクラス/メソッドはありません。おそらく、カスタムクラス/メソッドを1つ作成し、必要な複数のプロパティの値に関する情報を収集するために必要なドライバインスタンスを使用する必要があります。 –

答えて

0

ドライバとサーバー間の呼び出しを少なくするには、クライアント側/ウィンドウのコンテキストでJavaScriptを使用することができます。

あなたは、ドライバとサーバ間のコールの数を減らすことができます

combinedObject = driver.executeScript("function(domelement) { 
    return { abc: domelement.getAttribute('abc'), efg: domelement.getAttribute('efg'), hij: domelement.getAttribute('hij') }; 
}",foundedElement); 

このような何かを書くことができます。

Javaコードといくつかのjavascript関数を混ぜることが理にかなっている場合は、あなたの決定です。

+0

いいアイデア。 'domelement'は' arguments [0] 'でなければなりません。 –

+0

No. Javaコンテキストでは、foundElementはWebElementであり、executeScript関数に渡されます。 Webdriverは、この要素をJavascript/Client側のDOMElementとして変換します。そして、それはjavascript関数の引数として渡されます。 (この例ではパラメータドーム要素として)。 – powerpete

+0

しかし引数[0]も使用できます。それはドーム要素と同じオブジェクトを指しています。 – powerpete

関連する問題