嗨,我是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驱动程序的默认属性。
所以请向我解释一下这里到底发生了什么,或者我的结局有些错误。
答案 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());}