2017-01-06 3 views
0

J'écris un test sélénium pour une ancienne application qui utilise des fenêtres ModalDialog. Je sais comment gérer avec un ModalDialog:Puis-je gérer plus d'un modalDialog avec Selenium?

  1. Avant d'ouvrir ModalDialog Je l'appelle js - pour changer la fenêtre pro ModalDialog à la fenêtre classique:

    ((IJavaScriptExecutor) _driver).ExecuteScript("window.showModalDialog = window.open;");

  2. Après l'ouverture ModalDialog je passe à ce fenêtre et je peux gérer avec elle:

    public static void SwitchToWindow(IWebDriver _driver, string url) 
    { 
        String parentWindowHandle = _driver.CurrentWindowHandle; 
    
        IWebDriver popup = null; 
        var windowIterator = _driver.WindowHandles; 
    
        foreach (var windowHandle in windowIterator) 
        { 
         popup = _driver.SwitchTo().Window(windowHandle); 
    
         if (popup.Url.Contains(url)) 
         { 
          break; 
         } 
        } 
    } 
    

Mais si je veux le faire avec le deuxième ModalDialog (donc je suis dans la troisième fenêtre maintenant) Je suis arrivé cette question:

threw exception: OpenQA.Selenium.NoSuchElementException: Could not find element by: By.Id: btnClearSearchName

(dans la fenêtre Firefox clignote: Envoi de la demande à, Transférer quelque chose, lire quelque chose) si il est clair que Selenium ne peut pas trouver l'élément, car la page n'est pas chargée.

Si j'essayé d'ouvrir la troisième fenêtre sans exécuteur JS avant, il montre cette erreur:

threw exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> OpenQA.Selenium.WebDriverException: The HTTP request to the remote WebDriver server for URL http://localhost:7057/hub/session/c7e75043-9605-4f7c-80ac-233803527709/element/%7B7664f1ae-9c42-4de6-9e16-34fede6a9e26%7D/click timed out after 60 seconds. ---> System.Net.WebException: The operation has timed out at System.Net.HttpWebRequest.GetResponse()

J'utilise Sélénium v3.0.1 avec FireFox 45.6.0.

Merci pour votre aide!

Répondre

0

Pour pouvoir gérer la fenêtre suivante, vous devez changer le focus au contenu par défaut avec

_driver.SwitchTo().DefaultContent(); 
+0

Où dois-je mettre? Maintenant, je en premier modales ressembler à ceci: 1. modale du changement à la fenêtre par JSExecutor 2. Cliquez pour ouvrir le modal (maintenant les fenêtres en raison de 1.) 3. passage à la nouvelle fenêtre ---- deuxième modal: - (si j'essaye de nouveau JSExecutor = deuxième modal ne sera pas ouvert) - si je n'essaie pas JSExecutor et directement ouvrir deuxième modalWindow, = expiré erreur – emboe

+0

Je suppose que vous devriez essayer d'en mettre un avant 'break;' et un dans le bloc 'else' – Andersson

+0

Il fait les mêmes erreurs .. avec JSExecutor avant la deuxième fenêtre il n'ouvre pas la fenêtre et les demandes clignotantes ... sans fenêtre JSExcecutor ne peut pas être manipulé ... – emboe