繁体   English   中英

如何在网页上查找文本并使用Selenium和Java获取其XPath或CSS

[英]How to find text on a webpage and get its XPath or CSS with Selenium and Java

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

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

我可以基于文本“ Itemx”找到该元素

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

但是,如何获得其XPath或CSS?

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

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

选择第一c<a><b></b><c></c><c></c></a>与CSS选择可能是c:first-of-type ,或a > c:nth-child(2)ac:first-of-type ,或a > b + c ,或其他一些东西。 与XPath类似,有很多表示它的方法。 如果您更改标记,应该怎么办?

这完全取决于上下文,所需的稳定性,错误肯定或错误否定是否更糟(您可以将其设置得非常严格,以便如果标记更改,它可能会破坏,或者可以使其变得非常宽松,以便如果标记更改,您很可能会选择错误的内容)以及执行此操作的人的想法。 (我会选择上述哪种方式?Eeny,meeny,miny,mo ...)

但是,如果您只关心文档的当前状态并且不需要弹性,则首先考虑您是否确实需要这样的选择器。 您可能可以改为传递DOM元素。 但是,如果要唯一地标识元素,则遵循DOM树将是一种非常简单的方法,逐级向下移动,观察节点是哪个子节点。 您将得到如下所示的结果:

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

丑陋,但这可能就是您想要的。

如果可以通过文本识别项目,则已经有一个XPath: //*[contains(., 'Itemx')

Firefox的Firebug有一个名为Firepath的加载项。 基本上安装了它,您可以右键单击页面上的任何元素,然后选择:在FirePath中检查。 如果您尝试将XPATH或CSS SELECTOR路径修改得更短,也可以在此处运行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM