2010-05-25 5 views
0

J'ai rencontré un problème étrange dans Selenium RC. Quand j'utilise IE7, le test fonctionne correctement. Cependant si j'utilise firefox 3.5, Selenium récupère la page avant qu'elle ne soit complètement chargée. L'utilisation d'un thread de sommeil résout ce problème.Chargement de page dans FireFox et IE dans Selenium RC

Existe-t-il une différence entre, comment le drapeau de chargement de page géré dans IE et FireFox?

selenium.setTimeout(Timeout); 
selenium.open("http://localhost"); 
selenium.waitForPageToLoad(Timeout); 
selenium.windowMaximize(); 
selenium.windowFocus(); 
Thread.sleep(60000); 
selenium.type("//html/body/table/tbody/tr[2]/td/div/form/table/tbody/tr[1]/td/table/tbody/tr[3]/td[2]/input","test"); 
selenium.type("pwd","test"); 
selenium.click("submit"); 
selenium.waitForPageToLoad(Timeout);   
Thread.sleep(60000); 
System.out.println(selenium.getLocation()); 
System.out.println(selenium.getHtmlSource()); 
String[] ro=selenium.getAllLinks(); 
System.out.println("-----"+ro.length); 

Dans IE7, tout fonctionne avec le thread.sleep, pas avec FireFox.

+0

Votre exemple a deux sommeils, que l'on provoque un problème dans Firefox si elle est retirée? Aussi, quelle erreur revenez-vous de Selenium? –

+0

Si je supprime les sommeils, le sélénium n'a pas trouvé les éléments dans le FireFox. Rien d'autre. – Rajasankar

+0

Donc, ce serait le premier sommeil, et vous obtenez une exception ElementNotFoundException alors? –

Répondre

3

Il se peut que tout code JavaScript exécuté lors du chargement de la page ne soit pas terminé avant l'envoi de votre commande Selenium. Par exemple, si l'entrée que vous essayez de taper est initialement désactivée, Selenium pourrait essayer de taper dessus avant que le JavaScript qui l'a activé ne soit terminé. Si c'est le cas, vous pouvez essayer d'ajouter une commande waitForCondition appropriée dans votre test, celle-ci réévaluera continuellement et continuera une fois la condition remplie, ce qui est beaucoup mieux qu'un sommeil arbitraire.

L'exemple suivant attendrait un élément pour devenir activé:

selenium.waitForCondition("var value = selenium.isEditable('id=myElement'); value == true", "60000"); 

je recommande également l'examen de votre localisation, car il est actuellement un XPath très fragile, et une légère modification à la source HTML de votre application web pourrait casser votre test. Essayez de rechercher un attribut id et créez votre xpath par rapport à cela.

Par exemple, si votre table finale avait un id de myTable vous pouvez utiliser:

xpath=id('myTable')//tr[3]/td[2]/input 
+0

Peut être JavaScript n'a pas complètement charger la page. Cependant, je voudrais savoir, y at-il une différence dans le drapeau de pageload IE et FireFox. – Rajasankar

+0

Je suppose que la raison pour laquelle vous voyez des différences dans IE et Firefox est due à IE étant plus lent à localiser via XPath, donnant à votre page assez de temps pour terminer le chargement. –

Questions connexes