0

有一个页面列出了动态表上的项目。桌子上的顺序和物品数量随机变化。

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

我可以根据文本“Itemx”找到元素

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

但是我怎样才能得到它的 XPath 或 CSS?

我似乎在网上找不到任何东西。那里的所有内容都向您展示了如何使用 XPath 验证或查找文本。对我来说恰恰相反。我有文本,我想找到它的 XPath。

4

3 回答 3

3

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

使用 CSS 选择器选择 first cin<a><b></b><c></c><c></c></a>可能是c:first-of-type, or a > c:nth-child(2), or a c:first-of-type, or a > b + c, 或其他一些东西。与 XPath 类似,有许多表示它的方法。如果更改标记,会发生什么?

这完全取决于上下文、所需的稳定性、误报或误报是否更糟(你可以让它非常严格,这样如果标记发生变化,它可能会中断,或者你可以让它非常松,这样如果标记发生变化你可能会选择错误的东西)和做这件事的人的心血来潮。(我会选择以上哪种方式?Eeny,meeny,miny,mo...)

但是,如果您只关心文档的当前状态并且不需要弹性,那么首先考虑您是否真的需要这样的选择器。您可以改为传递 DOM 元素。但是,如果您想唯一标识一个元素,那么遍历 DOM 树将是一种相当简单的方法,逐级向下移动,观察该节点是哪个子节点。你最终会得到这样的东西:

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

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

于 2013-02-15T19:43:12.223 回答
1

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

于 2013-02-15T22:55:32.133 回答
0

Firefox 的萤火虫有一个名为 Firepath 的附加组件。基本上安装它后,您可以右键单击页面上的任何元素并选择:inspect in FirePath。如果您尝试修改 XPATH 或 CSS SELECTOR 路径更短等,您也可以在这里运行您的测试。

于 2017-09-14T23:01:35.027 回答