私はJavaの自動化スクリプトを書くためにSelenide/Seleniumを使用していますが、最近問題が発生しました。私は同じ行から要素を取りたいと思います。私は2番目の要素を比較します。 のHTMLコード例は:テーブル内の複数の要素を持つcssセレクタで要素を取る
<tr ng-repeat="testing" class="ng-scope" style="">
<td class="ng-binding">Style</td>
<td ng-if="testing2" class="ng-binding ng-scope">1</td>
<td class="ng-binding">5%</td>
</tr>
<tr ng-repeat="testing" class="ng-scope" style="">
<td class="ng-binding">Mask</td>
<td ng-if="testing2" class="ng-binding ng-scope">2</td>
<td class="ng-binding">8%</td>
</tr>
...
のは、それらのはるかがあるだろうと想像してみましょう。そして最も重要なのは、これらが無作為化できるということです。毎回。彼らは私が選んだものと方法を最後のページに依存します。
基本的に私はテストを検索したいと思っており、それは8%です。
私が試したことはありますが、どうしたらいいのか分かりません。リスト内のすべての要素を格納します。私はそれの前にクロムのドライバ情報とCSSセレクタを取得する。私はそれを取ることができますが、私ははるかに良い解決策があると思う:
int counter = $$(By.cssSelector("tr > [class='ng-binding']")).size();
for (int i = 0; i < counter; i++) {
SelenideElement word= $$(By.cssSelector(lokaator)).get(counter);
word.getText();
}
このコードは、「マスク」をとり、「8:私もこのコードで要素を取得しようとしました
List<WebElement> list = getWebDriver().findElements(By.cssSelector("[ng-
repeat='hyvitisLiik in vm.taotluseHyvitised'] > [class='ng-binding']"));
for(int i = 0; i < list.size(); i++){
logger.info(list.get(1));
}
% "要素。 しかし、私が本当に欲しいのは、getTextの与えられた値が "マスク"で、パーセント値をとり、それを比較すればテストです。 例:Webで単語「マスク」を検索し、パーセント値(この場合は8%)をとり、正確に8%であることをアサートして検証します。
は、第二のTRクラスを選択します
tr[1] > [class='ng-binding']
のように、インデックスにCSSセレクタを設定する方法はありますか?私が欲しいと思う他のアドバイスはありますか?
EDIT: は@Guyを書いたものを解答でXPathオプションで示したよう一列のみを使用してCSSセレクタで要素を取得することが可能です:
WebElementelement=getWebDriver().findElement(By.xpath("//td[text()='Mask']/followingsibling::td[2]"));
element.getText(); // 8%
xpathソリューションは素晴らしい、きれいでシンプルですが、私は本当に自分のコードにCSSを使いたいと思っています。もしcssビューに類似のものがあれば、それを共有してください。 – imbasheep
@iljuwka 'cssSelctor'を使ってテキストを見つけることができます。' 'td:contains(Mask)' 'のようなものです。しかし、Seleniumはこれを使用することをサポートしていません。あなたは 'InvalidSelectorException'を取得し、' cssSelector'は 'following-sibling'に相当するものを持っていません。 – Guy
はい、私は毎回 "InvalidSelectorException"エラーを受けていました。だからこそ、誰かがそれを解決するかどうか尋ねたのです。 私は// xpathが使えると思っています – imbasheep