Я столкнулся с проблемой автоматизации веб-приложения с помощью веб-драйвера selenium.
На веб-странице есть кнопка, при нажатии на которую открывается новое окно. Когда я использую следующий код, он выдает OpenQA.Selenium.NoSuchWindowException: Окно не найдено
WebDriver.FindElement(By.Id("id of the button that opens new window")).Click();
//Switch to new window
_WebDriver.SwitchTo().Window("new window name");
//Click on button present on the newly opened window
_WebDriver.FindElement(By.Id("id of button present on newly opened window")).Click();
Чтобы решить указанную выше проблему, я добавляю Thread.Sleep (50000);
между нажатием кнопки и SwitchTo
операторы.
WebDriver.FindElement(By.Id("id of the button that opens new window")).Click();
Thread.Sleep(50000); //wait
//Switch to new window
_WebDriver.SwitchTo().Window("new window name");
//Click on button present on the newly opened window
_WebDriver.FindElement(By.Id("id of button present on newly opened window")).Click();
Это решило проблему, но я не хочу использовать оператор Thread.Sleep (50000);
, потому что если для открытия окна требуется больше времени, код может завершиться ошибкой, а если окно открывается быстро, то оно излишне замедляет тест.
Есть ли способ узнать, когда окно открылось, и затем тест может возобновить свое выполнение?
Я наконец-то нашел ответ, я использовал приведенный ниже метод для переключения в новое окно,
public String switchwindow(String object, String data){
try {
String winHandleBefore = driver.getWindowHandle();
for(String winHandle : driver.getWindowHandles()){
driver.switchTo().window(winHandle);
}
}catch(Exception e){
return Constants.KEYWORD_FAIL+ "Unable to Switch Window" + e.getMessage();
}
return Constants.KEYWORD_PASS;
}
Чтобы перейти к родительскому окну, я использовал следующий код,
public String switchwindowback(String object, String data){
try {
String winHandleBefore = driver.getWindowHandle();
driver.close();
//Switch back to original browser (first window)
driver.switchTo().window(winHandleBefore);
//continue with original browser (first window)
}catch(Exception e){
return Constants.KEYWORD_FAIL+ "Unable to Switch to main window" + e.getMessage();
}
return Constants.KEYWORD_PASS;
}
Я думаю, это поможет вам переключаться между окнами.