如何使用带有Java的Selenium Webdriver从包含在多个span标记内的span元素中获取实际文本

时间:2014-01-17 09:35:18

标签: java selenium

嗨,我是Selenium Webdriver的新手。请帮我解决这个问题。

HTML结构如下:

<div> "other attibutes"
    <span> "other attibutes"
        <span>  "other attibutes"
            <span> "other attibutes" Text </span>     
        </span>
    </span>
</div>

现在我正在编写这样的Java代码:

public getCustomText() {
    List <WebElement> objSpanList = driver.findElement(By.id("dijit_layout_ContentPane_1")).findElements(By.tagName("span"));
    for (WebElement e : objSpanList) {
        System.out.println("The element text is : "+e.getText());
    }
}

当我调用此函数时,它输出如下:

 Text 

 Text

 Text

输出中没有编译或运行时错误。

实际上只对最后一个span元素它有一个文本,但对于上跨区标记它只有不同的属性,但没有元素文本。所有span元素都具有最后一个span元素的文本。所以我对硒网络驱动程序的行为感到困惑。

我不确定我是否得到正确的输出。或者这是上面跨度树的selenium web驱动程序的默认属性。

所以请向我解释一下这里到底发生了什么,或者我的结局有些错误。

3 个答案:

答案 0 :(得分:1)

你有3个<span>个元素,一个在另一个里面,所以即使你自己承认,你的输出也是准确的:“所有的span元素都有最后一个span元素的文本”。

您可以更改:

List <WebElement> objSpanList = driver.findElement(By.id("dijit_layout_ContentPane_1")).findElements(By.tagName("span"));

要:

WebElement innerSpan = driver.findElement(By.xpath(\\div\span\span\span"));

答案 1 :(得分:0)

您应该使用Jsoup - 这些操作的JAVA HTML解析器库。您的代码应该正常工作。根据文档,

 getText() 

返回此元素的可见(即未隐藏的CSS)innerText,包括子元素,没有任何前导或尾随空格

因此,它将返回子元素的内部文本。即内跨元素的文本。 为了仅定位带有文本内容的内部span元素,您可以继承By Class并根据需要覆盖受保护的方法,尽管期望所有子类都依赖于通过static提供的基本查找机制这个类的方法

答案 2 :(得分:0)

    List<WebElement> lst=driver.findElements(By.tagName("span"));
    for(int i=0;i<lst.size();i++)
    {System.out.println(lst.get(i).getText());}