41 votes

Comment définir le délai d'attente pour l'accès à Selenium Webdriver ?

Lorsque j'utilise un proxy dans un webdriver comme FirefoxDriver, si le proxy est mauvais, la méthode get se bloque pour toujours. J'ai défini des paramètres de temporisation, mais cela n'a pas fonctionné.

Voici mon code :

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("general.useragent.override", ua);    
Proxy p = new Proxy();
p.setHttpProxy(proxy);
profile.setProxyPreferences(p);
profile.setEnableNativeEvents(true);

// create a driver
WebDriver driver = new FirefoxDriver(profile);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);
driver.get("www.sina.com.cn")

L'appel à driver.get est bloqué pour toujours, mais je veux qu'il attende 30 secondes et que si la page n'est pas chargée, il lève une exception.

1voto

sou Points 21

La solution de driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS) fonctionnera sur les pages avec chargement synchrone. Cela ne résout pas, cependant, le problème sur les pages chargeant des choses en asynchrone, alors les tests échoueront tout le temps si nous définissons l'attribut pageLoadTimeOut .

0voto

premganz Points 389

Je trouve que les appels au délai d'attente ne sont pas assez fiables dans la vie réelle, en particulier pour Internet Explorer, mais les solutions suivantes peuvent être utiles :

  1. Vous pouvez prolonger le test complet en utilisant @Test(timeout=10000) dans le test junit à partir duquel vous exécutez le processus selenium. Cela libérera le thread principal pour l'exécution des autres tests, au lieu de bloquer l'ensemble du spectacle. Cependant, même cette méthode ne fonctionne pas toujours.

  2. Quoi qu'il en soit, vous n'avez pas l'intention de sauver le scénario de test, car l'arrêt d'une seule opération pourrait laisser toute la séquence de test dans un état incohérent. Vous pouvez simplement vouloir continuer avec les autres scénarios de test sans bloquer (ou peut-être réessayer le même test à nouveau). Dans ce cas, une méthode infaillible consisterait à écrire un poller qui interroge les processus de Webdriver (par exemple, IEDriverServer.exe, Phantomjs.exe) qui tournent depuis plus de 10 minutes et les tue. Un exemple peut être trouvé à Identifier (et tuer) automatiquement les processus dont le temps de traitement est long.

0voto

Manjunath24 Points 1

J'ai utilisé le code ci-dessous dans une situation similaire

driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);

et intégré le code driver.get dans un try catch, ce qui a résolu le problème du chargement des pages qui prenait plus d'une minute.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X