Новое в ember.js - использовал http://yoember.com/ для создания демонстрационного сайта ember.js. Я пытаюсь понять, как использовать транспортир для тестирования определенных элементов, но у меня возникают проблемы с их указанием.
Большинство, но не все элементы (кнопки, текстовые области и т. д.) Имеют сериализованное значение идентификатора: id='ember###'
, которое изменяется каждый раз при перезагрузке страницы, что делает невозможным указание некоторых элементов в Protractor (например, element(by.id('ember557')).sendKeys('foo');
).
Выполнение команды, подобной приведенной выше, вернет ошибку: Failed: No element found using locator: By(css selector, *[id = "ember557"])
, которая связана с изменением 3-значного значения идентификатора.
В моем демонстрационном приложении я смог зайти в файл /app/templates/components/
для этой страницы и вручную добавить что-то вроде id='name'
во входные данные руля и смог успешно найти и протестировать этот элемент в Protractor.
Однако это не идеально, и я хотел бы найти способ тестировать сайты, для которых у меня нет возможности изменять HTML-код.
Может ли кто-нибудь помочь мне понять это? Спасибо.
Я использую Транспортир в качестве исследовательского проекта для работы. В основном мы используем транспортир, и мне было поручено посмотреть, как он может работать с Ember. Я просто пытаюсь понять, что можно, а что нельзя с помощью Protractor для тестирования Ember.js. Я столкнулся со стеной и хотел спросить в Stackoverflow, могу ли я найти что-нибудь в этом роде. Я только взглянул на встроенное тестирование Ember, но мне показалось, что я не могу тестировать сайты, не размещенные локально. Это правда?
Вы можете использовать CSS selector
и XPath
для поиска элемента на странице, а не только ID
. Комбинируйте, чтобы использовать CSS selector
и XPath
, он может найти любой элемент на странице, а Protractor поддерживает их оба. Так что использовать Protractor для тестирования веб-приложения Ember.js
не проблема.
@yong К сожалению, css и xpath также имеют одинаковое значение ember ###.
например, на странице есть две карты с разными заголовками, но все элементы внутри карты имеют одинаковую структуру и один и тот же класс, вы можете найти узел контейнера карты по названию карты, используя xpath по тексту, а затем использовать узел контейнера в качестве родительского узла для найти внутри элемента с помощью css или xpath, например element(by.xpath('xpath of container node')).element(by.css('css/xpath of inside element'))
. Я думаю, что такой подход не должен разрешать все ситуации и потребует дополнительных усилий. Лучше всего добавить специальный идентификатор / класс в ключевой узел, например узел контейнера карты, таблицы, раздела полей формы и т. д.
Я не знаю, поддерживает ли его Protractor, но лучшая практика в ember - использовать атрибуты данных в качестве тестовых селекторов, а не повторно использовать классы ID или css. ember-test-selectors добавляет некоторые дополнительные функции, упрощающие этот подход и позволяющие удалить тестовые селекторы в производственной сборке. У меня такое ощущение, что речь идет о двух вопросах: а) Как мне выбрать элементы при тестировании? б) Как мне интегрировать Protactor в мой стек ember.
Ember вставляет собственные значения ember #### для идентификаторов. Вы не должны их использовать. Поместите классы или атрибуты данных в элементы для тестирования, просто добавив class = "something" или data-something к вашим элементам / компонентам.
Не могли бы вы объяснить, почему вы хотите использовать транспортир? Не привык, но говорят, что это для Angular. Сам Ember имеет очень хорошую встроенную поддержку тестирования и хорошо освещается в официальном руководстве.