как точно соответствовать с помощью селектора: class в watir-webdriver

Относительно обратно несовместимого изменения Watir 0.5.x Поиск элементов по :class теперь соответствует частичным атрибутам класса .

Как получить старое поведение? т.е. чтобы соответствовать точному имени класса.

Это нарушает мой код, в одном случае:

# expand all multiple records
 while  $browser.div(:class => "expander").exists?  
  $browser.div(:class => "expander").click
 end

потому что после .clicked класс div становится "expander hasChildren" (и, возможно, другими классами, в зависимости от цвета и содержимого строки таблицы). Есть ли лучший способ написать этот код, который расширяет все строки, которые все еще свернуты?


person Marcos    schedule 16.02.2012    source источник


Ответы (1)


Чтобы соответствовать точному имени класса, вы можете использовать регулярное выражение с начальными и конечными якорями:

$browser.div(:class => /^expander$/).exists?

Это будет точно соответствовать «расширителю», но не «расширителю hasChildren» или «чему-то расширителю».

Что касается вашего другого вопроса о том, есть ли лучший способ развернуть все строки, я думаю, что это действительно зависит от того, как выглядит HTML для страницы. У вас есть пример? Когда у меня возникла аналогичная проблема с аналогичным элементом управления, я смог использовать структуру div вокруг интерактивных элементов, чтобы сделать поиск более конкретным.

person Justin Ko    schedule 16.02.2012
comment
Спасибо, помогло, только ломко. Поскольку первое расширение каждой строки должно выполнять вызов AJAX для извлечения большего количества записей (я думаю, это то, что я тем временем заметил в консоли Firebug), я получил бы Element is no longer attached to the DOM, поэтому я добавил sleep 1 после .click, и это становится намного ниже, но все же такие ошибки, а остальные остаются нерасширенными. - person Marcos; 17.02.2012
comment
Поддерживает ли элемент управления опцию «расширить все», которую, возможно, могли бы включить ваши разработчики, или, возможно, предоставить метод, к которому вы могли бы получить доступ, выполнив js напрямую? - person Chuck van der Linden; 17.02.2012
comment
@ChuckvanderLinden К сожалению, нет, и я бы хотел, чтобы они были моими разработчиками; это просто еще один сайт, который я использую для учетных записей клиентов, на который я не имею никакого влияния. Но найти правильный js для прямого выполнения - это идея, которую я мог бы изучить глубже (хотя все же потребуется какое-то надежное указание на то, что DOM закончил обновление, например, .wait_until_present на чем-то предсказуемом) - person Marcos; 17.02.2012
comment
Использует ли сайт сторонний элемент управления? (часто можно найти с помощью поиска в Google таких вещей, как имена классов). Если это так, и вы можете найти демонстрационный сайт, управляемый поставщиком, он может предоставить другим здесь возможность посмотреть, как работает элемент управления, и вашу логику для расширения. Если вы можете найти демонстрационный сайт, начните новый вопрос о том, как расширять все строки. Кстати говоря, для таких вещей, как это, когда взаимодействие с чем-то меняет его, я использовал один трюк, это работать снизу вверх, не сверху вниз, когда вы нажимаете на материал, который меняется после того, как вы на него нажмете. - person Chuck van der Linden; 17.02.2012
comment
Две хорошие идеи, которые я не рассмотрел. Для восходящего подхода я должен подумать о том, как перечислить все :class => /^expander$/ div и как написать цикл for, который щелкает их в обратном порядке. - person Marcos; 24.02.2012
comment
ОБНОВИТЬ. Я больше не считаю этот способ регулярного выражения /^classname$/ жизнеспособным решением для моих программ, потому что по сравнению с "classname" он УЖАСНО МЕДЛЕН в watir-webdriver. Кто-нибудь знает, почему? Я думал, что мое программное обеспечение блокируется везде, особенно. вокруг петель. Я начал возвращаться к форме "classname" в некоторых местах, надеясь, что она все еще достаточно уникальна, чтобы не захватить неправильный элемент или другие обходные пути. К сожалению, другие локаторы в большинстве случаев мне недоступны. Еще один болезненный урок. - person Marcos; 27.02.2012