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