如何使用List <webelement>忽略跨度

时间:2019-03-15 15:22:45

标签: selenium

我正在尝试从下面的DOM结构中提取Main Text1Main 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结构中突出显示,但不在页面上突出显示。

2 个答案:

答案 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 

希望这会有所帮助。