Поиск текста по Xpath работает намного быстрее поиска в массиве WebElements

Столкнулся низкой скоростью поиска текста при изначальном выборе всех веб элементов столбца, в таблице на несколько тысяч строк:
// Выбор всех веб элементов (больше 5000), а затем получение веб элемента с конкретным текстом
C#
var demo = _driver.FindElements(By.XPath(“tableText”)).First(x => x.Text == “demo”);

// Передача нужного текста прямо в XPATH и поиск его средствами
//*[contains(text(),’" + name + "’)]

При помощи XPath время поиска занимает около секунды, в то время как при поиске в WebElements превысил минуту (точные цифры не мерял)

Сталкивались ли вы с такой проблемой?
Если Xpath так быстро работает, при использовании Page Factory появляется минус (я ее не использую, но рассматривал), так как придется создавать локаторы с параметрами отдельно и хранить их в атрибутах не получится. Будет не совсем однородный код и получается по минимуму нужно использовать FindElements

ещё бы поиск внутри таблицы был медленнее, чем десериализация каждой строки таблицы в объекты и только потом поиск по примитивам этих объектов :laughing:

1 лайк

Я всегда Xpath использую для этих целей, просто где то увидел что так ищут, думаю дай попробую и разочаровался :rofl:

Зависит от количества найденых элементов на странице. На больших цифрах вполне может быть.

В этом нет ничего удивительного.
И это не проблема вовсе, с чего вы решили что это проблема?

Вы перебираете коллекцию, где у каждого элемента делаете запрос его текста, что означает что вы отсылаете хттп запрос вебдрайверу на каждый чих.

Если у вас таких строк вагон и маленькая тележка, а искомый элемент находится в конце, а не в начале, то само собой это займет много времени.

Ну а использование First а не FirstOrDefault вообще выбросит исключение, если не найдет элемент.

Я думаю это будет проблема с производительностью для тех кто не в курсе, я на это не обращал внимания до тех пор пока не нарвался на большую таблицу

Ну а использование First - это для примера, там еще проверки есть и нужные исключения