t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

protractor
xpath
webdriver
Теги: #<Tag:0x00007f9c505824d0> #<Tag:0x00007f9c50582138> #<Tag:0x00007f9c50581bc0>

(Viktor) #1

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

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

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

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


(Vladislav Abramov) #2

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


(Viktor) #3

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


(Oleksandr Khotemskyi) #4

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


(Alexandr D.) #5

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

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

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

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


(Viktor) #6

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

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