Я пишу Selenium test для старого приложения, которое использует окна ModalDialog. Я знаю, как обращаться с одним ModalDialog:Можно ли обрабатывать несколько модальных диалогов с селеном?
Перед открытием MODALDIALOG Я называю это Js - изменить окно про MODALDIALOG к классическому окна:
((IJavaScriptExecutor) _driver).ExecuteScript("window.showModalDialog = window.open;");
После открытия 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.
Благодарим за помощь!
Где я должен поставить его? Теперь я в первый модальный это выглядит следующим образом: 1. изменения модальным к окну с помощью JSExecutor 2. Нажмите, чтобы открыть модальное (теперь окна из-за 1.) 3. переключатель в новом окне ---- второй модальный: - (если я попробую снова JSExecutor = второй модальный не будет открыт) - если я не попробую JSExecutor и сразу открою второй modalWindow, = ошибка с таймаутом – emboe
Я думаю, вы должны попробовать поставить один перед 'break;' и один в блоке 'else' – Andersson
Он делает те же ошибки .. с JSExecutor перед вторым окном он не открывает окно и мигает запросы ... без окна JSExcecutor нельзя обрабатывать ... – emboe