/ / webiriver é muito lento para localizar um elemento por regexp em uma página pesada - webdriver, watir, watir-webdriver

O watir-webdriver está muito lento ao localizar um elemento por regexp em uma página pesada - webdriver, watir, watir-webdriver

Eu encontrei watir-webdriver para ser extremamente lentolocalizando um elemento por regexp em uma página muito grande, isso é pelo menos verdadeiro no FF 8.0.1 para mim. Exemplo em uma página de resultados de pesquisa de voo (contendo cerca de 50 resultados de pesquisa, cada um deles é uma boa parte da estrutura de 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…

Todos os itens acima funcionam com velocidade aceitável em watir 1.6.5 e watir 2.0.4 no IE8.

Para comparação, aqui estão algumas vezes usando o watir-webdriver contra o IE8 e FF3.6

watir-webdriver no IE8:

  1. => 0,172017
  2. & 3. => Tempo limite :: Erro: execução expirada de C: /ruby/1.8.7-p334/lib/ruby/1.8/timeout.rb: 64: in `rbuf_fill"

Watir-webdriver com FF3.6:

  1. => 0,055005,
  2. => 80,095009,
  3. => 101.734173.

Passos para chegar à página em teste - www.expedia.co.uk/Flights, faça uma pesquisa de ida e volta para voos e mude para a guia Voos de retorno na página de resultados.

Alguém tem alguma idéia do porquê isso está acontecendo?

Respostas:

0 para resposta № 1

Uma coisa que fizemos às vezes quando uma consultatorna-se opressivo é sair do loop selenium / watir completamente e pedir ao navegador para executar algum javascript para pegar os elementos que queremos. Obviamente, isso tem algumas limitações, especialmente se você precisa usar watir no objeto que recebe de volta (você pode "t"). Mas se você estiver procurando por algo em particular, você não pode ficar muito mais rápido. Estou supondo que você esteja usando o jQuery, mas na realidade o JavaScript pode ser arbitrário e o que você precisar.

Eu acho que isso funcionaria ... (mas não me processe se eu tiver um erro; P)

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