Selenium 中特定类表的 CSS 选择器

Posted

技术标签:

【中文标题】Selenium 中特定类表的 CSS 选择器【英文标题】:CSS selector for table of a particular class in Selenium 【发布时间】:2011-01-02 17:32:32 【问题描述】:

即使我打算在 Selenium 中使用这个 CSS 选择器,它也应该足够通用。

我有一个带有“列表”类表的页面,它可以出现多次。我想找出每次出现以及每个表有多少行。因此,为此我可以使用 table[class='list'] 并在页面中为我提供该类的所有表格。在这个例子中让我们说它是 3。现在我想遍历每个表,所以我尝试了 table[class='list']:nth-child(1) 第一次出现 & table[class='list ']:nth-child(2) 第二次出现,依此类推。我认为 table[class='list']:nth-child(1) 会给我第一次出现,但我不能使用 nth-child(n) 表示法。

如果我使用 table[class='list']:nth-child(odd),我会得到所有奇数表,但我不能通过说 table[class='list'] 来专门针对特定表:第n个孩子(3)。它没有给我任何结果。我做错了什么?

顺便说一句,我正在使用 Firebug 的“FireFinder”插件在测试页面上评估我的 CSS 选择器。

【问题讨论】:

所有这些表都是同一元素的直接子元素吗?他们是同一级别的吗? 是的,他们在同一级别 【参考方案1】:

也许 XPath 更适合您?

//table[@class='list' and position()=1]
//table[@class='list' and position()=2]
...

【讨论】:

实际上我们最初在 XPath 中拥有所有选择器,但由于在 IE 中速度较慢,我们将选择器转换为更快的 CSS 很高兴知道。我通常在 CSS 更紧凑时使用它,而在它更可靠时使用 XPath。无论性能如何都能混搭,真是太好了。【参考方案2】:

table[class='list']:nth-child(1) 将匹配所有具有 list 类且是其父级的第一个子级的表元素。它与匹配的元素数量或该集合的顺序无关,但如果所有表都具有相同的父级(并且该父级没有其他子级),那么您的方法将起作用。

您可以通过其他方式遍历 table.list 返回的元素,或者以某种方式更改选择器,具体细节取决于页面的实际结构。

【讨论】:

这实际上消除了我的一些困惑,但在这种情况下,幸运的是,它们都有相同的父级。也就是说,所有这些表格都在另一个表格单元格中。那就是 html 看起来像这样: ... ... 对此的补充 - 如果我使用 table[class='list']:nth-child(1) 是否意味着它必须是第一个孩子或第一个“匹配”孩子,因为我我正在尝试匹配类型列表的第一个表。据我了解,不管 [class='list'] 是第 n 个孩子。是的,就是这样 - 它是第 n 个孩子,与“匹配”无关。基本上,当您使用 nth-child 时,它会遍历其父级并找到所有子级并为您提供该位置的子级。所以当我说 table[class='tblList']:nth-child(1) 时,它匹配父元素的第一个子元素,恰好是 因此它不符合我的条件。现在,如何访问第一个“匹配”元素?您可以使用nth-of-type 来消除<br/>,但这仍然不会考虑您的类过滤器。我不认为 CSS 本身就具有您需要的功能。我建议使用 XPath 或编写脚本。

以上是关于Selenium 中特定类表的 CSS 选择器的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Selenium 中的 CSS 选择器选择同级

使用 Selenium 提取元素的 CSS 选择器

Selenium - CSS选择器:如何在每个项目的长项列表中找出哪个颜色是选择器?

在使用 Selenium 的某些元素之后通过 CSS 选择器查找元素

InvalidSelectorException 使用 CSS 选择器定位“data-”属性标注的元素

Selenium-python 中的 css 选择器中的括号 [?] 的问题