Selenium getText()不起作用

时间:2013-05-28 23:41:25

标签: java selenium

因此,对于我的项目,我正在使用Selenium来检查我的DOM中是否有重要的字段。我正在分析的XML如下:

<results>
<result index="1">
<track>
<creator>God</creator>
</track>
</result>
<results>

首先,我通过运行:

获得所有结果标记的列表作为webElements
List<WebElement> result_list = driver.findElements(By.tagName("result"));

然后我做了一个for循环,以便通过运行

检查创建者标签是否在那里
try {
for (int i = 0; i < result_list.size(); i++) {
WebElement track = result_list.get(i).findElement(By.tagName("track"));

    System.out.println(track.findElement(By.tagName("creator")).getText());
System.out.println(track.getTagName());
System.out.println(track.getAttribute("creator"));

}
result = true;
}
catch (Exception e) {
result = false;
}

我已经插入了print语句,以便查看每个标记的内容。我是selenium的新手所以我只是想确保我正在为web元素正确迭代,这意味着每次循环迭代时对getText和getAttribute的每次调用都应该是不同的。唯一的问题是我为每个getText()调用打印出一个空字符串,并为每个getAttribute()调用打印一个空字符串。为什么会这样?输出如下。

<empty string> (nothing is printed, just illustrating the empty string)
track
null

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

Selenium不处理XML。它只是HTML。请阅读文档,这很清楚 可能有一个插件

答案 1 :(得分:0)

WebElement.getAttribute(String)没有返回您的期望,因为对属性的内容存在轻微的误解。元素的属性在元素的标记内定义('id','name','style'等)。

你要做的是寻找<track>的子元素而不是你正在做的是试图找到<track creator="a_creator">,这会返回你期望的东西。

我从来没有能够让WebElement.findElement()在没有下降到xpath的情况下处理另一个WebElement。如下所示:

WebElement parent = driver.findElement(By.id("parent"));
WebElement child = parent.findElement(By.tagName("child"));

似乎永远不会奏效。但是,在这种情况下,例如:

WebElement parent = driver.findElement(By.id("parent"));
WebElement child = parnet.findElement(By.xpath(".//creator"));

应该有效。如果您是xpath的新手,您可能需要考虑快速浏览一些basic tutorials