我正在尝试从下面的DOM结构中提取Main Text1
和Main Text2
。
<div class="origination">
<div class="origin">
<h3>
Main Text1
<span class="info">Test1</span>
</h3>
<div class="test">
</div>
</div>
<div class="origin">
<h3>
Main Text2
<span class="info">Test2</span>
</h3>
<div class="test">
</div>
</div>
</div>
我在xpath下使用了text()来标识没有跨度的标头
@FindBy(xpath = ".//*[@id='origination']/div[*]/h3/text()")
List<WebElement> content;
我正在尝试使用下面的代码打印不带跨度的标题元素
for (WebElement element: content){
System.out.println("Header" + element.getText());
}
但是我遇到了错误:
org.openqa.selenium.NoSuchElementException:15秒后超时。找不到列表元素
但是,当我在firepath元素上使用相同的XPath时,它会在DOM结构中突出显示,但不在页面上突出显示。
答案 0 :(得分:0)
这是答案。
spanText = element.findElement(By.xpath("//span[@class='info']")).getText()
element.getText().Replace(spanText, string.Empty);
答案 1 :(得分:0)
使用XPath
可能无法获得该值。但是,如果进行一些string
操作,则可以达到预期的结果。
List<WebElement> listData = driver.findElements(By.xpath("//div[@class='origin']/h3"));
for(int i=0;i<listData.size();i++)
{
System.out.println(listData.get(i).getText().replaceFirst(listData.get(i).findElement(By.tagName("span")).getText(), ""));
}
输出:
Main Text1
Main Text2
希望这会有所帮助。