定位没有特定类名的元素
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),但是它变得非常混乱。我不建议这样做。
【讨论】:
谢谢!这成功了,随后解决了我在屏幕上选择其他卡片的另一个问题!以上是关于定位没有特定类名的元素的主要内容,如果未能解决你的问题,请参考以下文章