定位没有特定类名的元素

Posted

技术标签:

【中文标题】定位没有特定类名的元素【英文标题】:Locating elements without a specific class name 【发布时间】:2016-12-30 08:54:10 【问题描述】:

这与我之前提出的这个问题相同 - Watir webdriver; counting elements with changing class names。我能够根据使用类名asset-card selectable 添加特定数量的元素。

目前,我希望单击更多元素以将它们添加到现有集合中。这是我的困境:

当一个元素没有被点击时,类名是:image-card asset-card selectable 当一个元素被点击时,selected被附加到类名中:image-card asset-card selectable selected

就我而言,我正在尝试寻找image-card asset-card selectable 且不包括selected 的其他元素。我不确定如何明确定位它们。

是否有正则表达式解决方案或有关如何解决此问题的任何其他想法?

【问题讨论】:

【参考方案1】:

查找没有特定类的元素的最简单方法是使用:css 定位器。

browser.divs(css: 'div.image-card.asset-card.selectable:not(.selected)')

CSS 选择器的解释:

div - 这是您尝试匹配的元素的标签名称 .image-card.asset-card.selectable - 这是您希望匹配元素具有的类列表 :not(.selected) - 这是您希望匹配元素具有的类列表

如果您反对 CSS 选择器,您可以遍历元素。请注意,这会更慢,因为它必须对浏览器进行更多调用。

selectable = browser.divs(class: 'image-card asset-card selectable')
unselected = selectable.reject  |e| e.class_name.split(' ').include?('selected') 

我之前尝试过使用正则表达式(请参阅my blog post),但是它变得非常混乱。我不建议这样做。

【讨论】:

谢谢!这成功了,随后解决了我在屏幕上选择其他卡片的另一个问题!

以上是关于定位没有特定类名的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jQuery选择没有特定类名的元素?

SMACSS、语义类名和嵌套元素

使用 JS 定位类名迭代

如何更改特定类名的所有类名元素

如何使用 Selenium 和 Python 定位具有多个类名的元素

按特定类名选择元素