Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium:在Java中使用cssSelector提取div的文本_Java_Selenium_Junit_Css Selectors - Fatal编程技术网

Selenium:在Java中使用cssSelector提取div的文本

Selenium:在Java中使用cssSelector提取div的文本,java,selenium,junit,css-selectors,Java,Selenium,Junit,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_nickna

我正在使用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>
但这将返回“请求信息*收件人:”


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

我不确定是否可以使用一个css定位器,但您可以从div获取文本,然后从div的子节点获取文本并减去它们。类似的内容(代码未检查):


使用CSS选择器无法做到这一点,因为CSS选择器没有足够细粒度的方法来表示“DIV中包含的文本节点,但不表示其其他内容”。不过,您可以使用XPath定位器来实现这一点:

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

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

您还可以获取元素的文本内容并使用regexp删除标记。还要注意:你应该使用不情愿的量词

String getTextContentWithoutTags(WebElement元素){
return元素.getText().replaceAll(“]*?/>,”).trim();
}

提供的XPath定位器符合逻辑,可以在Chrome的控制台中工作,但在Selenium中不起作用。Selenium将抛出以下错误
给定的选择器//div[@class='StdLevel1']/text()无效或未生成WebElement。出现以下错误:InvalidSelectorError:xpath表达式“//div[@class='StdLevel1']/text()”的结果为:[对象文本]。它应该是一个元素。
那么是否有解决方案,或者您是否只需要抓取div并解析getText()字符串?据我所知,事实上selenium允许text()、node等函数。
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, "");
//div[@id='recipient_div_3']/text()
driver.findElement(By.xpath("//div[@id='recipient_div_3']/text()")).getText()
String getTextContentWithoutTags(WebElement element) {
    return element.getText().replaceAll("<[^>]*?/>", "").trim();
}