2015-08-27 11 views
0

У меня возникла ситуация (упомянутая ниже), из-за которой мой скрипт селена терпит неудачу. Кто-нибудь может мне помочь?Невозможно обработать новое окно

У меня есть веб-страница, где есть кнопка сохранения, нажатие кнопки сохранения открывает новое всплывающее окно. Мое требование - перейти в новое окно и нажать на одну из кнопок (в новом окне), которая автоматически закроет окно и перейдет на другую страницу. Я написал код, который работает нормально, но иногда из-за проблемы с приложением новое окно не закрывается. И из-за этого мой скрипт терпит неудачу. Вот код, который я использовал.

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

    } 

ответ

0

Глядя на ваш код, я могу видеть, что вы делаете в два раза итерацию к следующему окну:

it.next(); 
String childWindow = **it.next();** 

Второй it.next() является obsolet. Надеюсь, что это решит вашу проблему.

+0

Я собираюсь объяснить, что я понимаю из кода, который я написал. Пожалуйста, поправьте меня, если я ошибаюсь. Итератор на начальном этапе всегда указывает на место памяти перед фактическим запуском. Итак, первый it.next() указывает на родительские окна. Поэтому я использовал его. Второй it.next() указывает на дочернее окно. Вот почему я использовал его .next() дважды. –

+0

Вы правы в первой части, что вы получаете набор окон, доступных для водителя. Но откуда вы знаете, что первым является родительский, а второй - ребенок? Попробуйте добавить проверку на основе windowID, чтобы убедиться, что вы переключаетесь в нужное окно. –

+0

Я думаю, это решит проблему. –

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