2013-02-15 11 views
0

有一个列出动态表中项目的页面。表格中项目的顺序和数量随机更改。如何在网页上找到文本并使用Selenium和Java获取其XPath或CSS

我想找到基于文本“Itemx”的项目“Itemx”中的一个,然后在代码的另一部分中获取并使用其XPath或CSS。

我能找到基于文本“Itemx”

driver.findElement(By.cssSelector("BODY")).getText().matches("^[\\s\\S]*Itemx[\\s\\S]*$"); 

的元素,但我怎样才能得到它的XPath或CSS?

我似乎无法在网上找到任何东西。所有内容都显示了如何使用XPath验证或查找文本。对我而言,情况恰恰相反。我有文本,我想找到它的XPath。

回答

3

XPath和CSS选择器都是任意的。在一般情况下,没有好的答案。

与CSS选择器选择在<a><b></b><c></c><c></c></a>第一c可能是c:first-of-type,或a > c:nth-child(2),或a c:first-of-type,或a > b + c,或者其他的一些东西。与XPath类似,表示它的方式很多。如果你改变标记,会发生什么?

这一切都取决于上下文,所需的稳定性,误报或误报是否更糟(您可以使它非常严格,以便如果标记更改它可能会中断,或者可以使其非常松散,以至于如果标记发生变化,你可能会选择错误的东西)以及做这件事的人的兴致。 (我会选择以上哪种方式?Eeny,meeny,miny,mo ...)

但是,如果您只关心文档的当前状态并且不需要恢复能力,那么首先要考虑如果你真的需要有这样的选择器。您可以改为传递DOM元素。但是,如果你想唯一标识一个元素,通过DOM树将是一个相当直接的方式,逐级往下走,观察该节点是哪个孩子。你会最终得到这样的东西:

:root > :nth-child(3) > :nth-child(1) > :nth-child(4) 

丑,但它可能是你想要的。

+1

+1有一个很好的描述。我通常告诉人们,“_XPath和CSS定位器就像是驾车路线,而不是地址,两种技术都可以让你到同一个地方,但只有后者能够唯一标识这个地方。” – 2013-02-15 22:52:16

1

如果您可以通过其文本识别项目,那么您已经拥有XPath://*[contains(., 'Itemx')

0

Firefox的firebug有一个名为Firepath的插件。基本上安装它,你右键单击页面上的任何元素,然后选择:在FirePath中检查。您也可以在这里运行测试,如果您尝试修改XPATH或CSS SELECTOR路径较短等。

相关问题