У меня возникла ситуация (упомянутая ниже), из-за которой мой скрипт селена терпит неудачу. Кто-нибудь может мне помочь?Невозможно обработать новое окно
У меня есть веб-страница, где есть кнопка сохранения, нажатие кнопки сохранения открывает новое всплывающее окно. Мое требование - перейти в новое окно и нажать на одну из кнопок (в новом окне), которая автоматически закроет окно и перейдет на другую страницу. Я написал код, который работает нормально, но иногда из-за проблемы с приложением новое окно не закрывается. И из-за этого мой скрипт терпит неудачу. Вот код, который я использовал.
public void test() {
// i have two pages gets involved in this scenario
driver.get("some url"); // user is in page 1
// clicking on save button
driver.findElement(By.xpath("some xpath")).click(); // a new window opens
Set<String> winIDS = driver.getWindowHandles();
if (winIDS.size() > 1) {
Iterator<String> it = winIDS.iterator();
it.next();
String childWindow = it.next();
driver.switchTo().window(childWindow);
driver.findElement(By.xpath("some xpath")).click();
//after clicking on this button the user is navigated to page2
}
// after clicking on the button in the new window the new window gets closed and the user is navigate to page 2 as mentioned before.
// To validate if that has happened i am using the below code so that my test case flow wont be stopped. But
// the code is getting hanged at the new window as the app fails to perform the button click action on the new window.
winIDS = driver.getWindowHandles();
if(winIDS.size() > 1)
{
Iterator<String> it = winIDS.iterator();
it.next();
String childWindow = it.next();
driver.switchTo().window(childWindow);
driver.close();
//i m making the test failed here as the new window is not closed.
}
}
Я собираюсь объяснить, что я понимаю из кода, который я написал. Пожалуйста, поправьте меня, если я ошибаюсь. Итератор на начальном этапе всегда указывает на место памяти перед фактическим запуском. Итак, первый it.next() указывает на родительские окна. Поэтому я использовал его. Второй it.next() указывает на дочернее окно. Вот почему я использовал его .next() дважды. –
Вы правы в первой части, что вы получаете набор окон, доступных для водителя. Но откуда вы знаете, что первым является родительский, а второй - ребенок? Попробуйте добавить проверку на основе windowID, чтобы убедиться, что вы переключаетесь в нужное окно. –
Я думаю, это решит проблему. –