2016-10-18 3 views
0

Я использую селен на странице с большой DOM (1000 строк, ~ 10000 узлов). Я пытаюсь определить, существует ли элемент, который находится почти в самом конце DOM.Поиск большого DOM для элемента в конце

Структура нечто подобное:

<html> 
    <body> 
     <section></section> 
     <script></script> 
     <span> 
      // several more wrappers around the UL 
      <ul id="itemsList"></ul> 
     </span> 
    </body> 
</html> 

Если section узел содержит 99% линий.

Я знаю, что UL всегда будет в одном месте.

XPath Я использую следующий:

//body/span//ul 

Если UL существует, выполняется поиск < 500мс. Но если UL не существует, поиск займет 2-5 секунд. Я не понимаю этого, поскольку я ожидал бы, что обход случится таким же образом и займет такое же количество времени.

Как я использую селен, я также пробовал использовать By.Id, но это дает тот же результат.

+2

У вас есть неявный тайм-аут в вашем коде? – Grasshopper

+0

В дополнение к комментарию выше, я бы рекомендовал попробовать использовать getElementsByXpath (или List ) и проверить размер этого списка. – Mikhail

+0

Подумайте о поиске на жестком диске файла, начинающегося с root (C: \). Сравните это с началом с C: \ Users \ you \ Documents \ projects \ foobar \ meetingMinutes \ 2015 \ January \ Чем больше структуры DOM, заданной в XPath, тем меньше количество путей, которые селен должен искать и тем быстрее будет выполнен поиск. – MikeJRamsey56

ответ

0

Это может быть из-за явных команд ожидания в вашем коде. Если селен может найти элемент в пределах Неявное ожидание переходит к следующему шагу. Но если он не смог найти элемент в неявное время ожидания, он проверяет на Явное ожидание, и если вы дали явное ожидание этого элемента, Selenium будет ждать, пока явное время ожидания перед выбросом исключения.

+0

Да, конечно! – FLSH

Смежные вопросы