Selenium:使用Java中的cssSelector提取div的Text

Ada*_*gal 9 java junit selenium css-selectors

我正在使用Selenium为网页编写JUnit测试,我正在尝试验证页面中是否存在预期的文本.我正在测试的网页代码如下:

<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>
Run Code Online (Sandbox Code Playgroud)

我想比较预期与页面上的内容,所以我想使用Assert.assertTrue().我知道要从div获得一切,我能做到

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

但这将返回"reqd info*Recipient:"

有没有办法只使用cssSelector从div("收件人")获取文本,而没有其他标签?

Ros*_*son 5

您不能使用CSS选择器来执行此操作,因为CSS选择器没有一种足够细粒度的方法来表示“ DIV中包含的文本节点,而不是其其他内容”。不过,您可以使用XPath定位器来做到这一点:

driver.findElement(By.xpath("//div[@id='recipient_div_3']/text()")).getText()
Run Code Online (Sandbox Code Playgroud)

该XPath表达式将识别作为DIV的直接子节点的单个文本节点,而不是其中及其子节点中包含的所有文本。

  • 提供的XPath定位器是合乎逻辑的,可以在Chrome的控制台中使用,但不能在Selenium中使用。Selenium将引发以下错误...`给定的选择器// div [@ class ='StdLevel1'] / text()无效或没有导致WebElement。发生以下错误:InvalidSelectorError:xpath表达式“ // div [@ class ='StdLevel1'] / text()”的结果是:[对象文本]。它应该是一个元素。 (2认同)