2017-01-06 3 views
0

Я пишу Selenium test для старого приложения, которое использует окна ModalDialog. Я знаю, как обращаться с одним ModalDialog:Можно ли обрабатывать несколько модальных диалогов с селеном?

  1. Перед открытием MODALDIALOG Я называю это Js - изменить окно про MODALDIALOG к классическому окна:

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

  2. После открытия ModalDialog я переключаюсь на что окно и я могу справиться с этим:

    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; 
         } 
        } 
    } 
    

Но если я хочу сделать это с вторым ModalDialog (так я в третьем окне сейчас) я получил этот вопрос:

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

(в окне Firefox мигает: Отправка запроса на, Перенос что-то, Почитайте что-нибудь), так ясно, что элемент Selenium can not find, потому что страница не загружена.

И если я пытался, прежде чем открыть третье окно без JS исполнителя, он показывает эту ошибку:

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()

Я использую Selenium v3.0.1 с FireFox 45.6.0.

Благодарим за помощь!

ответ

0

Чтобы иметь возможность обрабатывать следующее окно, вы должны переключить фокус на контент по умолчанию с

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

Где я должен поставить его? Теперь я в первый модальный это выглядит следующим образом: 1. изменения модальным к окну с помощью JSExecutor 2. Нажмите, чтобы открыть модальное (теперь окна из-за 1.) 3. переключатель в новом окне ---- второй модальный: - (если я попробую снова JSExecutor = второй модальный не будет открыт) - если я не попробую JSExecutor и сразу открою второй modalWindow, = ошибка с таймаутом – emboe

+0

Я думаю, вы должны попробовать поставить один перед 'break;' и один в блоке 'else' – Andersson

+0

Он делает те же ошибки .. с JSExecutor перед вторым окном он не открывает окно и мигает запросы ... без окна JSExcecutor нельзя обрабатывать ... – emboe

Смежные вопросы