Locating elements without a specific class name

孤人 提交于 2019-12-11 05:25:53

问题


This is in the same vein as this question I asked before - Watir webdriver; counting elements with changing class names. I was able to add the specific number of elements based on using the class name asset-card selectable.

Currently, I am looking to click on more elements to add them to the existing set. Here is my dilemma:

  • When an element is not clicked, the class name is:
    image-card asset-card selectable
  • When an element is clicked, selected is appended to the class name:
    image-card asset-card selectable selected

In my case, I am trying to look for additional elements that only say image-card asset-card selectable and do not include selected. I am not sure how to explicitly locate them.

Is there a regex solution or any other thoughts on how to approach this?


回答1:


The easiest way to find an element without a certain class is to use a :css locator.

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

An explanation of the CSS-selectors:

  • div - This is the tag name of the elements you are trying to match
  • .image-card.asset-card.selectable - This is the list of classes you want the matching elements to have
  • :not(.selected) - This is the list of classes you do not want the matching elements to have

If you are opposed to CSS-selectors, you could iterate over the elements. Note that this will be slower as it has to make more calls to the browser.

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

I have tried to use a Regular Expression before (see my blog post), however it gets pretty messy. I would not recommended going that way.



来源:https://stackoverflow.com/questions/39102675/locating-elements-without-a-specific-class-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!