Мы работали над проектом React, для которого мы проводим e2e-тестирование с использованием Mocha-Nightwatch.Как тестер автоматизации пользовательского интерфейса мне нужно было что-то для доступа к элементам, у меня были следующие опции:
1) Использование " CSS-селектора ", что уродливои долго, как вы упомянули.
2) Использование « X-path » элемента, что опять-таки длинный и намного более запутанный
3) Лучшее из всех « Id's » для элементов [потому что они уникальны во всем приложении].Но проблема заключалась в том, что когда мы указали id элемента, веб-пакет React будет добавлять числовую строку альфа к идентификатору каждый раз, когда вы создаете приложение, каждый раз создавая уникальный идентификатор.Итак, снова в этом сценарии произошел сбой идентификатора.
4) Мы остановились на « классах » для элементов, к которым мы хотели получить доступ при тестировании.
Что касается идентификатора или имени класса, для этого существует ярлык no .Вам нужно дать осмысленные имена для идентификаторов / имен классов, какой-то инструмент [который может существовать или не существовать] добавит некоторый случайный идентификатор ко всем элементам, который вообще не нужен, и просто увеличивает пространственную сложность вашего приложения.
Лучшее решение - взять модуль за модулем и добавить имена классов или идентификаторов [id, они не делаются динамическими с помощью Webpack в вашем случае] самостоятельно.
Подход, который мы использовали, мы учили автоматизациипроверено, как добавлять имена классов или идентификаторы, и как проверять в инструментах разработчика Chrome, действительно ли идентификаторы / классы существуют или нет.Но ограничением этого является то, что тестер может добавить некоторые классы или идентификатор, которые могут конфликтовать с вашей функциональностью.Чтобы решить эту проблему, вы можете использовать правильное соглашение об именах, например, мы используем .test-что-то или # test-что-somethig в качестве нашего соглашения для именования идентификаторов и классов тестов.
Вот пример изВаш файл селекторов:
usernameInput: '.test--auth-username > input',
passwordInput: '.test--auth-password > input',
loginButton: '.test--auth-submit > button',
loginError: '.test--auth-error',
inputError: '.test--inputField-errorText',
Надеюсь, это поможет, ура