Я пытаюсь писать веб-тесты с использованием Selenium на веб-странице, созданной с помощью reactjs. Я могу захватывать свои элементы с помощью xpath, но это не идеально и очень ограничивает.
Мои основные проблемы продолжают появляться, когда мне нужен определенный элемент, например, тот, который я только что построил, или как манипулировать определенным элементом в списке.
Я постоянно сталкиваюсь с одной и той же проблемой для каждого теста, который я пытаюсь написать, без уникальных идентификаторов. Я не знаком с reactJs, но это обычная проблема с Selenium?
Да, эта веб-страница изначально была создана без автоматического тестирования. Так есть ли способ использовать селен в такой среде в его текущем состоянии?
@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')]]).





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