2016-08-23 2 views
1

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

Есть ли регулярное выражение или любые другие мысли о том, как подойти к этому?

ответ

2

Самый простой способ найти элемент без определенного класса - использовать локатор :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), однако это становится довольно грязным. Я бы не рекомендовал идти этим путем.

+0

Спасибо! Это сделало трюк и впоследствии разрешило мою другую проблему с выбором других карт на экране! – kmancusi

Смежные вопросы