0

所以对于我的项目,我使用 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;
}

我插入了打印语句以查看每个标签的含义。我是 selenium 的新手,所以我只是想确保我对 web 元素进行了正确的迭代,这意味着对于循环的每次迭代,对 getText 和 getAttribute 的每次调用都应该不同。唯一的问题是我为每个 getText() 调用打印了一个空字符串,为每个 getAttribute() 调用打印了一个空字符串。为什么会这样?下面输出。

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

任何帮助将不胜感激!

4

2 回答 2

1

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

于 2013-05-28T23:44:44.870 回答
0

WebElement.getAttribute(String)没有返回您所期望的,因为对属性是什么有一点误解。元素的属性在元素的标签中定义(“id”、“name”、“style”等)。

你想要做的是寻找一个何时的子元素,<track>而不是你正在做的是试图寻找<track creator="a_creator">哪个会返回你所期望的。

我从来没有能够WebElement.findElement()在另一个 WebElement 上工作而不下降到 xpath。所以像:

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 的新手,您可能需要考虑快速浏览一些基本教程

于 2013-05-30T06:03:38.900 回答