Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 使用Selenium,xpath无法找到';文本';要素_Testing_Xpath_Selenium_Automation_Webdriver - Fatal编程技术网

Testing 使用Selenium,xpath无法找到';文本';要素

Testing 使用Selenium,xpath无法找到';文本';要素,testing,xpath,selenium,automation,webdriver,Testing,Xpath,Selenium,Automation,Webdriver,我是Selenium新手,在通过XPath查找元素时遇到了一个问题。我试图处理这个问题,但花了太多时间,它仍然没有工作 我正在尝试从站点自动下载文件 我正在搜索包含版本名的元素,之后我需要相应地单击下载图标 为了找到元素,我正在编写以下代码 var element1 = driver.FindElement(By.XPath("//*[@id='versiontable']/div[3]/a[Text()='Firefox 22.0 (Beta 2)']")); 但是,它不起作用,无法找到元

我是Selenium新手,在通过XPath查找元素时遇到了一个问题。我试图处理这个问题,但花了太多时间,它仍然没有工作

我正在尝试从站点自动下载文件

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

为了找到元素,我正在编写以下代码

var element1 = driver.FindElement(By.XPath("//*[@id='versiontable']/div[3]/a[Text()='Firefox 22.0 (Beta 2)']"));
但是,它不起作用,无法找到元素


之后,我需要相应地单击下载图标。我不确定如何单击与当前版本firefox相关的元素。有什么建议吗?

你为什么不使用.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)']"));

首先,xpath函数
text()
必须用小写字母编写。
此外,您正在寻找的链接条目不是第三(3)个div

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

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

XPath看起来是错误的。尝试或使用类似的工具检查Firebug中的XPath表达式(或使用)。另外,我会尝试
//*[@id='versiontable']/div[3]//a[text()='Firefox 22.0(Beta 2)]
(使用
//a
来匹配更深层次的
a
元素-但不确定
div[3]
部分)或者更确切地说。谢谢您的建议。我下载了Firepath,它似乎非常有用。你说得对,它实际上在工作——只是链接文本。然而,我确信我已经尝试过好几次了,但不管怎样,它现在确实对我有用。谢谢。这工作对我来说也是一样。谢谢我只是想澄清为什么我们在第一次div之后需要括号“[”?这不是很有效,也不可维护。您使用与cindition相同的表达式,然后用于导航,因此您无缘无故地进行了两次查找。它与
//div/div[@class='right']/a[text()='Firefox 22.0(Beta 2)]
在这种情况下。如果div中有多个
a
元素,它甚至不正确,因为它会找到所有
a
元素。@dirkk:恐怕你没有注意到“行”中有两个链接。我建议您仔细查看该页。如果您仍然不理解xapth cam,我将给您正确的解释;-)。此外,也许您应该测试您的xpaht。@hr_117:请您解释一下为什么我们在第一个div之后需要括号“[”?很抱歉,我只想下次理解并使用它。这是“谓词”…谓词(第一个div后的括号“[”用于查找您要查找的“行”。(在左侧“列”中有一个“Firefox 22.0(Beta 2)”的链接)用于他的“行”,并选择右侧的“列”链接。另一种可能是
“//div/div/a[text()='Firefox 22.0(Beta 2)]/../div[@class='right']/a
。选择左侧链接转到步骤(父级)返回并选择“右侧”链接。(我更喜欢第一种解决方案。)