В наших автоматизированных тестах, типичная строка в коде может выглядеть примерно так:Как настроить искатели Capybara на сайте с помощью css-модулей?
find('.edit-icon').click
Мы находимся на пути к использованию CSS-модулей в нашем проекте, и я был предупрежден, что имена классов может резко измениться. Довольно смешной пример это сайт, который использует смайлики в своих именах классов (когда вы проверяете страницу):
Как я мог бы лучше подготовиться к изменению этого резкому? Я думаю, что многие из наших спецификаций ломаются, но я немного беспокоюсь о том, что не могу вообще писать тесты с этой новой технологией в нашем проекте.
Один из способов заключается в использовании пользовательской водосвинки селекторов - https: // GitHub .com/jnicklas/capybara/blob/master/lib/capybara/selector.rb - для абстрактных вещей, чтобы вы могли делать что-то вроде 'find (: edit_button) .click'. Полный ответ, хотя это «все зависит» - почему вы использовали класс css в первую очередь? –
В приведенном выше примере, который распространен во всем моем проекте, я заканчиваю кнопками и другими элементами, которые не могут быть найдены ни с каким идентифицирующим текстом или другими атрибутами. Я также предпочитаю использовать селектор классов, чтобы избежать каких-либо двусмысленных/ложных срабатываний при написании ожиданий (например, если ожидается, что какой-то текст перейдет из одной области в другую). Я надеюсь, что по мере продвижения нашего проекта я могу привести несколько более конкретных примеров. Классы обычно не используются в автоматизированных спецификациях? Спасибо за помощь, Том. – Phil
Да, классы используются довольно много - хотя я стараюсь использовать их в качестве последнего средства. Элементы, в которых нет текста, других атрибутов и т. Д., Являются основным вариантом использования. Как я уже говорил, пользовательские селектора могут помочь здесь - Capybara.add_selector (: edit_button) {css do | локатор | '.edit-icon' end}, который затем изолирует css до одного места. Когда имена классов изменяются, вы можете изменить этот селектор и, возможно, сделать что-то вроде «[class * =« \ _ edit \ _ »]», когда вы переходите к модулям css, в зависимости от того, как имена классов заканчиваются составлением –