CSS选择器:href的锚文本包含

时间:2018-08-27 13:17:46

标签: java css selenium

我目前正在与Selenium合作,现在已经到达了一个有趣的CSS选择器领域,但是难度却非常高。

我目前正在寻找选择Google工具栏的其他选项。例如,当您搜索某项内容时,在结果页上,您可以选择搜索相同的字词,但在图片,新闻,视频等下方

我对选择“图像”链接特别感兴趣。

我已经研究了一段时间了,最​​接近的是下面的选择器:

div a.q.qs [href]

这将深入到正确的子类,但其中有16个。尽管进行了无数次漫无目的的搜索,但我无法使用围绕锚文本的contains方法来完成查询,该方法在目标子类中是唯一的。

我知道Selenium中有一个By LinkText选项,但是我不确定锚文本在整个页面中是否唯一。另外,我真的很想了解CSS选择器,因此即使我想解决这个特定问题,也可以将其应用于将来的问题。

我正在寻找类似下面的伪CSS选择器的东西:

div a.q.qs [href] .Anchorcontains(“ Images”)

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

所有链接都有一个称为tbm的唯一参数:对于图片,其值为isch,所以我会选择

a[href*="tbm=isch"]

答案 1 :(得分:0)

有时可以通过CSS选择器获得所需的内容,但是如果要通过包含的文本查找元素,则必须使用链接文本/部分链接文本(如果它是链接)或XPath来使用其他所有内容。 / p>

您想要的XPath

//div[@id='hdtb-msb-vis']//a[.='Images']

您可以使用//a[.='Images'],但返回两个元素,其中一个不可见。

要对此进行细分

//在任何级别
div找到DIV
[@id='hdtb-msb-vis']的ID为“ hdtb-msb-vis”
//a的任何级别都有孩子A
[.='Images']包含等于“图片”的文本(.

如果要通过链接文本进行浏览,可以编写类似

的内容
int count = driver.findElements(By.linkText("Images")).size();

和打印计数。我的猜测是它将是2,其中之一不可见。如果需要,可以使用Selenium将其进一步过滤为仅可见链接。

您将在BackSlash的CSS选择器答案中遇到相同的问题。您可以稍作调整,并使用CSS选择器定位器解决此问题

#hdtb-msb-vis a[href*='tbm=isch']

以下是一些CSS参考链接,可帮助您入门:W3C referenceSauceLabs CSS Selectors tipsTaming Advanced CSS Selectors