2016-01-20 59 views
0

我试图让HREF属性的价值,但它总是不正确的Xpath说。硒说无效的XPath定位器

HTML代码:

enter image description here

我试图代码:

 WebElement Link = driver.findElement(By.xpath("//table[contains(@class,'display')]/thead/tbody/tr/td/a")); 
    System.out.println(Link.getAttribute("href")); 

我试过很多的XPath,但没有一次成功。

+2

1)它应该不:'//表[含有(@类, '显示器')]/TBODY/TR/TD /了'? 2)可能有其他与此表达相符的元素,你确定你有正确的元素? 3)谁说_incorrect Xpath_以及如何(即更多的错误细节)? 4)请显示使用代码,您尝试从href属性中获取值。 –

+1

请发布HTML。 – Newcomer

+0

我与以前的评论者同意,这里就是他们说的总结:http://stackoverflow.com/help/mcve。 –

回答

2

这应该工作:

WebElement Link = driver.findElement(By.xpath("//table[contains(@class,'display')]/tbody/tr/td/a")); 

说明:tbody没有嵌套在thead

注意,像这样的路径表达式可以返回一组多个节点的文档顺序。 findElement方法只返回第一个结果节点。因此:如果您正在查找的a元素不再是此表中的第一个元素,则路径表达式会中断。

如果在href是唯一的,这样的事情是不容易出错:

WebElement Link = driver.findElement(By.xpath("//table[contains(@class,'display')]//a[@href='/admin/client/product_overrides/edit/242625']")); 
+0

第一个表达式如何依赖于行的顺序?在我看来,你的意思是说,第一表达依赖于隐含的假设是,在结果集中的第一个节点将是想要的人,因为'findElement'只返回的第一个结果。 –

+0

@MathiasMüller是的,这就是我的意思。如果页面代码发生变化,并且其他'a'元素碰巧是第一个出现在表体中,那么测试可能会失败。随意编辑答案,指出它。 –

+0

在您的许可下进行编辑 - 并且未经您的许可向上投票:-)。 –