watir-webdriver очень медленно находит элемент с помощью регулярного выражения на тяжелой странице - PullRequest
3 голосов
/ 02 декабря 2011

Я обнаружил, что watir-webdriver очень медленно находит элемент с помощью регулярных выражений на очень большой странице, это по крайней мере верно для FF 8.0.1 для меня.Пример на странице результатов поиска рейсов (содержит около 50 результатов поиска, каждый из которых является хорошей частью структуры html):

1.

irb(main):057:0>
t=Time.now;browser.div({:id=>”flightModule40”}).exists?;puts
”#{Time.now-t}” #=> 0.202

2.

irb(main):056:0>
t=Time.now;browser.div({:id=>/flightModule40/}).exists?;puts
”#{Time.now-t}” #=> 131.046

3.

irb(main):058:0>
t=Time.now;browser.div({:id=>/flightModule/, :index=>40}).exists?;puts
”#{Time.now-t}” #=>—is working for 30 minutes for me already…

Все вышеперечисленное работает с приемлемой скоростью в watir 1.6.5 и watir 2.0.4 в IE8.

Для сравнения, здесь иногда используютсяwatir-webdriver для IE8 и FF3.6

watir-webdriver для IE8:

  1. => 0.172017
  2. & 3. => Тайм-аут :: Ошибка: выполнениеистек срок действия C: /ruby/1.8.7-p334/lib/ruby/1.8/timeout.rb: 64: в `rbuf_fill '

watir-webdriver с FF3.6:

  1. => 0,055005,
  2. => 80,095009,
  3. => 101,734173.

Действия по переходу на тестируемую страницу - www.expedia.co.uk/Flights, поиск в оба конца рейсов и переход на вкладку «Обратные рейсы» на странице результатов.

Есть ли какие-либо понятия, почему это происходит?

1 Ответ

0 голосов
/ 22 июля 2015

Одна вещь, которую мы делали иногда, когда запрос становится угнетающим, - это вообще выйти из цикла селен / вода и попросить браузер выполнить некоторый javascript, чтобы получить нужные нам элементы.Очевидно, что это имеет некоторые ограничения, особенно если вам нужно использовать watir на объекте, который вы возвращаете (вы не можете).Но если вы ищете что-то конкретное, вы не можете получить намного быстрееЯ предполагаю, что вы используете jQuery, но на самом деле JavaScript может быть произвольным и любым необходимым.

Я думаю, что это будет работать ... (но не судитесь со мной, если у меня возникла ошибка; P)

browser.execute_script("jQuery(\"div[id*='flightModule40']"\")")
...