2016-02-05 7 views
0

Имея довольно сложное угловое приложение со многими страницами (состояниями) и условными разделами, которые создают множество тестовых сценариев, мне нужно выполнить тесты e2e. Я устал от вложенных селекторов, таких как «div.SomeComponent> ul: nth-child (2)> ...» и т. Д., Даже используя имена BEM (особенно, когда приложение развивается, и легко портить тесты путем небольшой смены html состав).Пользовательский класс или атрибут в тестировании E2E

Вопрос заключается в том, хотите ли вы, чтобы вы выбрали несколько фиктивных (пустых) классов или data- * attrs, чтобы упростить селектор транспортировщика (или groovy) за счет потери семантики? Какая альтернатива?

ответ

0

Чтобы избежать изменения определений элементов каждый раз, когда разработчики изменяют css и не используют длинные строки css для выбора ваших элементов, вы можете попробовать обратиться к ним с помощью других средств (id, className, model и т. Д.). См. Примеры https://github.com/angular/protractor/blob/master/docs/locators.md.

Мой личный фаворит - использовать элемент (by.css ('[ng-click = "executeSomeAction()"]')), поскольку это, скорее всего, не изменится при любых обновлениях приложений. Он также работает и для других директив.

Что касается тестирования приложений с большим объемом страниц и элементов, приятно определить ваши элементы в классе, а затем вызвать их в тестовой спецификации по мере необходимости. Это уменьшает код в ваших спецификациях и упрощает их чтение. Вы также можете создать отдельный файл для действий/функций, которые выполняют ваши тесты.

Надеюсь, что это поможет ответить на ваши вопросы.

+1

Я полностью согласен с поисковыми механизмами, на самом деле мой fav - использовать элемент (by.model (modelName)). Дело в том, что тестеры (которые не являются разработчиками) используют некоторые другие испытательные рамки - селен, groovy. Несмотря на то, что селекторы будут очень похожи, есть ситуация, когда на странице есть пара очень общих компонентов. Пусть говорят, что у нас 5 из них, но сначала условно показано. Без наличия какого-либо фиктивного класса, такого как «componentName1», «componentName2» и т. Д. Или имеющих некоторые специальные данные - * attrs, им трудно привязать к n-му компоненту, поскольку «n» является динамическим. – adam