2013-05-26 76 views
2

我是新来的硒,并有一个XPath查找元素的问题。我试图解决这个问题,但花费了太多的时间,它仍然不起作用。使用硒,xpath找不到'文本'元素

我试图从this网站自动下载文件。

我正在搜索包含版本名称的元素,之后我需要相应地单击下载图标。

example

我写了下面的代码,以便找到元素

var element1 = driver.FindElement(By.XPath("//*[@id='versiontable']/div[3]/a[Text()='Firefox 22.0 (Beta 2)']")); 

但是,这是行不通的,元素不能被发现。

然后我需要点击相应的下载图标。我不知道如何点击与当前版本的Firefox相关的元素。有什么建议么?

+0

XPath看起来不对。尝试[Firepath](https://addons.mozilla.org/en/firefox/addon/firepath/)或一些类似的工具,以便能够检查Firebug中的XPath表达式(或使用[Firebug控制台](http:///getfirebug.com/wiki/index.php/Command_Line_API#.24x.28xpath.29))。此外,我会尝试'//* [@ id ='versiontable']/div [3] // a [text()='Firefox 22.0(Beta 2)']'(使用'// a'匹配更深层次的'a'元素 - 虽然不确定'div [3]'部分)还是宁可[By.linkText()'](http://selenium.googlecode.com/svn/trunk/docs/api/的Java /组织/ openqa /硒/ By.ByLinkText.html)。 –

+0

感谢您的咨询。我下载了Firepath,看起来很有帮助。 –

回答

1

首先xpath函数text()必须写成小写。
此外,您正在寻找的链接条目不是第​​三(3)格。

因为直接下载是div中class =“right”的链接。
请试试这个:

"//div[div/a[text()='Firefox 22.0 (Beta 2)']]/div[@class='right']/a" 
+0

这项工作也适合我。谢谢!我只是想澄清为什么我们需要括号“[”第一格后? –

+0

这不是非常有效,也不可维护。您使用与cindition相同的表达式,然后进行导航,因此您无意中两次执行查找。在这种情况下,它与'// div/div [@ class ='right']/a [text()='Firefox 22.0(Beta 2)']'相同。如果div内有多个'a'元素,它甚至不会是正确的,因为它会找到所有'a'元素。 – dirkk

+0

@dirkk:我担心你错过了“行”中有两个链接的地方。我建议仔细看一下页面。如果你仍然不理解xapth凸轮,我会给你正确的解释;-)。也许你应该测试你的xpaht。 –

4

为什么不使用By.linktext,对我来说好像容易多了?

driver.findElement(By.linkText("Firefox 22.0 (Beta 2)")).click(); 

但是,您的XPath不工作的原因是它不适合网页的结构。 div[3]并不是指层次结构中的三个div,而是指下一层次中的第三个div。你需要类似的东西

var element1 = driver.FindElement(By.XPath("//*[@id='versiontable']/div/div/div/a[text()='Firefox 22.0 (Beta 2)']")); 
+0

你是对的,它实际上是工作 - 只是linkText。但是,我确信我正在尝试几次,但无论如何,它现在对我来说确实有效。谢谢。 –