Нахождение элементов без определенного имени класса

Это в том же духе, что и вопрос, который я задавал раньше - Watir webdriver; подсчет элементов с изменением имен классов. Мне удалось добавить определенное количество элементов на основе использования имени класса 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') }

Я уже пытался использовать регулярные выражения (см. Мой пост в блоге), однако это становится довольно грязным. Я бы не рекомендовал идти по этому пути.

Другие вопросы по тегам