9

Seleniumを使用してWebページのJUnitテストを作成しており、期待されるテキストがページ内に存在することを確認しようとしています。私がテストしているWebページのコードは次のようになります。

<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()を使用したいと思います。私はdivからすべてを取得するために、私ができることを知っています

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

ただし、これは「reqd info * Recipient:」を返します。

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

4

3 に答える 3

5

CSS セレクターには、「DIV に含まれるがその他の内容ではないテキスト ノード」を表現するための十分にきめ細かいアプローチがないため、CSS セレクターではこれを行うことはできません。ただし、XPath ロケーターを使用してそれを行うことができます。

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

その XPath 式は、DIV とその子ノードに含まれるすべてのテキストではなく、DIV の直接の子である単一のテキスト ノードのみを識別します。

于 2012-04-27T16:58:49.157 に答える
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()
于 2012-04-27T16:34:54.800 に答える
0

要素のテキスト コンテンツを取得し、regexp を使用してタグを削除することもできます。また、注意してください: 消極的な量指定子を使用する必要があります https://docs.oracle.com/javase/tutorial/essential/regex/quant.html

String getTextContentWithoutTags(WebElement element) {
    return element.getText().replaceAll("<[^>]*?/>", "").trim();
}
于 2016-05-12T12:47:56.160 に答える