2012-04-27 5 views
8

Seleniumを使用してWebページのJUnitテストを作成しています。予想されるテキストがページ内に存在することを確認しようとしています。Selenium:JavaのcssSelectorでdivのテキストを抽出します。

<div id="recipient_div_3" class="label_spacer"> 
    <label class="nodisplay" for="Recipient_nickname"> recipient field: reqd info </label> 
    <span id="Recipient_nickname_div_2" class="required-field"> *</span> 
    Recipient: 
</div> 

は、私がページ上にあるものと期待されているものを比較したいので、私は() Assert.assertTrueを使用する:Webページのコードは、私はこのようなルックスをテストしています。私は

String element = driver.findElement(By.cssSelector("div[id='recipient_div_3']")).getText().replaceAll("\n", " "); 

を行うことができ、DIVからすべてを取得することを知っているが、これは戻ります「REQD情報*受信者:」

だけのDIV(「受信者からテキストを取得する方法はあります")他のタグなしで、cssSelectorを使用していますか?

答えて

4

CSSセレクタは、その「DIVに含まれるテキストノードを表現するためのきめ細かい十分なアプローチを持っていなくはありませんので、あなたは、CSSセレクタでこれを行うことはできませんその他のコンテンツ "となります。あなたはしかし、XPathのロケータであることを行うことができます。

driver.findElement(By.xpath("//div[@id='recipient_div_3']/text()")).getText() 

をXPath式がちょうど DIVの直接の子である単一のテキスト・ノードではなく、すべてその中に含まれるテキストとその子を識別することノード。

+2

消極的quntifierを使用する必要があります提供するXPathロケータは論理的であるとChromeのコンソールで動作しますが、それはセレンでは動作しません。 Seleniumは次のエラーをスローします... '指定されたselector // div [@ class = 'StdLevel1']/text()は無効か、WebElementになりません。次のエラーが発生しました:InvalidSelectorError:xpath式 "// class ['class =' StdLevel1 ']/text()の結果は[object text]です。それは要素でなければなりません。 – BSchlinker

+0

解決方法はありますか、divを取得してgetText()文字列を解析するだけですか? –

+0

私の理解では、Infactセレンは、テキスト()、ノード等の機能を許可します。 – SIslam

4

1つのcssロケータでは可能かどうかは分かりませんが、divからテキストを取得してdivの子ノードからテキストを取得し、それらを減算できます。そのようなもの(コードはチェックされていません):

String temp = ""; 
List<WebElement> tempElements = driver.findElements(By.cssSelector("div[id='recipient_div_3'] *")); 
for (WebElement tempElement : tempElements) { 
    temp =+ " " + tempElement.getText(); 
} 
String element = driver.findElement(By.cssSelector("div[id='recipient_div_3']")).getText().replaceAll("\n", " ").replace(temp, ""); 

これは、xpathの使用を避けるためです。 XPathはそれを行うことができます:

//div[@id='recipient_div_3']/text() 
関連する問題