2010-11-18 48 views
3

J'automatise une page de formulaire en utilisant Selenium RC (C#). Après avoir cliqué sur le bouton 'Envoyer', j'obtiens une alerte 'Records Edited Successfully!'. Le titre de cette boîte d'alerte est 'The page at http://www .******.com says:'.Que serait une solution de contournement pour les alertes JavaScript générées dans l'onload d'une page() à l'aide de Selenium?

Mais Selenium ne voit pas cette alerte. Et je ne peux pas contourner cela.

Voici ce que j'ai essayé:

selenium.Click("ctl00_Content_ctl00_btnSubmit"); 
selenium.WaitForPageToLoad("30000"); 

Résultat: Je reçois l'erreur suivante: "Selenium.SeleniumException : Timed out after 30000ms"

Alors j'ai essayé:

selenium.Click("ctl00_Content_ctl00_btnSubmit"); 
selenium.OpenWindow("", "The page at The page at http://www.******.com says:"); 
selenium.Close(); 
selenium.WaitForPageToLoad("30000"); 

Résultat: Trois fenêtres sont ouvert (site, alerte et fenêtre supplémentaire). Rien ne se ferme. Je reçois l'erreur suivante: "Selenium.SeleniumException : Timed out after 30000ms"

Alors j'ai essayé:

selenium.Click("ctl00_Content_ctl00_btnSubmit"); 
selenium.SelectWindow("The page at The page at http://www.******.com says:"); 
selenium.Close(); 
selenium.WaitForPageToLoad("30000"); 

Résultat: Je reçois l'erreur suivante: "Could not find window with title 'The page at http://www .******.com says:'"

Toutes les suggestions? S'il vous plaît, aidez à surmonter cet obstacle.

Répondre

1

Enfin, j'ai trouvé une solution de contournement:

selenium.Click("ctl00_Content_ctl00_btnSubmit");       
    Thread.Sleep(5000); 
    selenium.KeyDownNative("32"); 
    selenium.KeyUpNative("32"); 

vous souhaite bonne chance, tout le monde!

4

Apparemment, la meilleure façon de faire c'est à toi se script pour redéfinir la fonction alert() à quelque chose qui n'affiche pas une boîte de dialogue.

((JavascriptExecutor) fDriver).executeScript(
    "window.alert = function(msg) { return true; }" 
); 
+0

Solution trop extrême dans mon cas. Je ne veux pas (et n'ai pas autorité) pour changer le code du site Web. – Prostak

+1

Je ne suggère en aucun cas que vous * changiez * le site web ... Je suggère que dans votre script Selenium, vous "injecter" une ficelle de JavaScript lorsque vous exécutez * tests automatisés * seulement, pour remplacer le La fonction alert() retourne juste true. (Vous pouvez faire la même chose avec confirmation, etc.) - Comme il n'y a pas de besoin/désir d'interaction de l'utilisateur, vous ne causez aucun problème, et certainement pas de changer la base de code * réelle *. – scunliffe

+0

hmm intéressant .... Comment puis-je injecter une friandise? Est-ce que je l'entre dans ma méthode C# [Test]? Pourriez-vous donner des instructions étape par étape? Merci. – Prostak