Идентификация элементов на веб-странице ReactJS с помощью Selenium - лучший способ?

Я пытаюсь писать веб-тесты с использованием Selenium на веб-странице, созданной с помощью reactjs. Я могу захватывать свои элементы с помощью xpath, но это не идеально и очень ограничивает.

  1. Если на сайте произойдут какие-либо изменения, xpath не будет работать.
  2. все имена классов идентичны без каких-либо других атрибутов для захвата, а также имена классов меняются, потому что они динамически создаются с помощью реакции.
  3. Других атрибутов использовать нельзя.
  4. Не могу использовать CSSSelector, потому что имя css также создается с помощью реакции.

Мои основные проблемы продолжают появляться, когда мне нужен определенный элемент, например, тот, который я только что построил, или как манипулировать определенным элементом в списке.

Я постоянно сталкиваюсь с одной и той же проблемой для каждого теста, который я пытаюсь написать, без уникальных идентификаторов. Я не знаком с reactJs, но это обычная проблема с Selenium?

Похоже на компоненты React, которые были разработаны без учета тестируемости вне модульных тестов React. Вы правы, что использование XPath приведет к слезам. Люди, разрабатывающие компоненты, должны предоставить некоторую форму идентичности, которая не изменится (или, по крайней мере, не изменится сильно). Как создаваемые имена классов несущественны; использование чего-то согласованного для внешнего интеграционного тестирования - это просто хорошая идея.

Dave Newton 03.05.2018 19:17

Да, эта веб-страница изначально была создана без автоматического тестирования. Так есть ли способ использовать селен в такой среде в его текущем состоянии?

Jesse Bell 03.05.2018 19:22

@Jesse Bell, XPath так же надежен, как селектор или идентификатор CSS. Что делает локатор хрупким, так это зависимости дерева и использование автоматически сгенерированных / бессмысленных атрибутов. Например, by.xpath("id('myid')") так же надежен, как by.css("[id='myid']") или by.id("myid"). Обратите внимание, что у вас также есть возможность найти элемент по тексту с помощью внедрения JavaScript или XPath (.//*[not(./*)][normalize-space()='my text'] или .//*[string()[contains(., 'my text')]]).

Florent B. 03.05.2018 19:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
7
3
4 496
1

Ответы 1

Обычной практикой является использование атрибута data-test в ваших HTML-элементах, чтобы помочь в тестировании на основе браузера; независимо от того, является ли он статическим или визуализируется платформой JS; Я бы порекомендовал вам попросить разработчиков включить эти атрибуты в кодовую базу, чтобы вы могли легко нацеливать элементы, которые вы хотите протестировать, не беспокоясь об изменении имен классов или атрибутов id.

Другие вопросы по теме