2011-10-24 2 views
2

Il y a une longue liste des images sur la page. Il y a un bouton AJAX "Charger plus d'images" dans l'application (en bas de la page) qui est activé automatiquement lorsque l'utilisateur fait défiler la page vers le bas. Je veux faire défiler la page jusqu'à la fin avec Selenium et m'assurer qu'il n'y a pas de bouton "Charger plus d'images" au bas de la page. Le script (il pourrait être une solution plus élégante, mais ce n'est pas un point)Comment attendre seulement DOM pour charger avec Selenium (sans images)

browser.execute_script(""" 
      setInterval(function() { 
       window.scrollBy(0,50000); 
      }, 1000); 
      ;""") 
invisibleShowMoreCounter = 0; 
while True: 
     if "" == browser.find_element_by_id("show_more").text: 
      invisibleShowMoreCounter = invisibleShowMoreCounter + 1 
      if (invisibleShowMoreCounter > 3): break 
     time.sleep(1) 

permet de faire défiler la page vers le bas, puis vérifie qu'il n'y a pas d'élément « de show_more » pendant 3 secondes (ne sais pas si ce cycle est nécessaire du tout si). Donc le fait est qu'il défile avec succès la page vers le bas mais après cela, il reste sur browser.find_element_by_id ("show_more") jusqu'à ce que la page soit complètement chargée (y compris les images) ce qui prend beaucoup de temps. Donc DOM est là mais comme il y a beaucoup d'images, il faut environ quelques minutes pour les charger toutes. Je ne suis pas sûr à 100% que c'est parce que la page n'est pas complètement chargée mais ça a l'air très probable (donc ça va à la première itération du cycle et ensuite restez sur find_element_by_id pendant quelques minutes puis allez plus loin et terminez avec succès La question est de savoir s'il est possible de commander la méthode find * pour ne pas attendre que toutes les images soient terminées, de sorte que le test ne prenne pas quelques minutes à passer?

Le réglage browser.implicitly_wait(1) ne semble pas pertinent pour vous aider.

Répondre

1

Vous pouvez attendre le statut navigateur/document interactif. C'est attendre état js

document.readyState='interactive' 
+0

Je ne suis pas sûr que cela soit pertinent dans le contexte Selenium (avec WebDriver). Cela semble être juste une vérification JS et le problème est que les commandes Selenium attendent que la page soit complètement chargée. – Artemm

+0

avez-vous essayé avec "webdriver.load.strategy" à "fast"? – user861594

Questions connexes