2011-11-04 28 views
12

私は、Seleniumを使ってプロジェクトにWebテストを追加しています。私は既に、特定の要素を調べる一連のテストを行っています。Selenium:他の要素の隣の要素を見つけよう

final WebElement dateElement = web.findElement(By.id(elementId)); 

これはうまくいきます。 もう一つの要件があります。これは私の生成したページにあります:

<input type="text" id="dateElement" name="dateElement" value="bunch of monkeys" tabindex="101" placeholder="yyyy-mm-dd"> 
<span class="error">dateElement is an invalid date</span> 

エラーメッセージはどうやって取得できますか? 私は、dateElementの直後にあるクラス "error"を持つspan要素を要求できるようにしたいと思います。

(このエラーメッセージはSpring MVCによって壊されたので、直接変更するのは簡単ではありません。

代替案は歓迎します。

答えて

19

OK、私は既にXpathとそれに続く兄弟を使って解決策を見つけましたが、それほど複雑ではありませんでした。

final WebElement errorElement = web.findElement(By.xpath("//*[@id='" + elementId + "']/following-sibling::span[@class='error']")); 

この

は私が望んでいたものを私に与え、そしてそれは私がしたい正確に何である、ここではないとき NoSuchElementExceptionをスローします。

+0

素晴らしい、私も '使用して単純化することができるにも答え – CosminO

+0

これを必要な最終WebElement errorElement = dateElement.findElement(By.xpath( "次-兄弟::スパン[@クラス= 'エラー']") ); '実際の' WebElement dateElement'が利用可能な場合は 'その要素を検索のルートとして使用する必要がありますが、その場合はxpath式が '//'(または '/')で始まるべきではないことに注意してください。そうでなければ、ドキュメントルートから検索します。 – neXus

5
elementSelector = "input + span[class='error']"; 

final WebElement dateElement = web.findElement(By.cssSelector(elementSelector)); 
+0

なぜ、 'dateElement'ではなく' errorElement'ですか?そして、それがdateElementと無関係のエラーであればどうでしょうか? – tishma

+1

@tishmaこれはOPで使用されたものなので – CBRRacer

関連する問題