2017-02-07 2 views
-1

Я использую фреймворк, управляемый ключевыми словами, и вызываю его из файла DS.java. Мои требования следующие:
Переключение между окнами браузера с помощью Selenium Webdriver

  1. Browser window01: выполнять задачи,
  2. Открыть новый window02 браузер, нажав на URL в window01,
  3. На window02, выполнять определенные задачи,
  4. Закрыть window02 и переключатель управления для window01,
  5. Я получаю ошибку org.openqa.selenium.NoSuchWindowException: no such window. (Session info: chrome=55.0.2883.87)

(Driver info: chromedriver=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)

Я сделал с указанным ниже кодом, но это не сработало для меня.

(able to get the window handle here: CDwindow-b20d349b-3cb5-42ed-9f77-5229c88d4300)

public static void store_ParentWindow(String TCID,String vTCD,String vKW) throws IOException, InterruptedException, AWTException, BiffException, ParseException{ 
    String parentWindow = driver.getWindowHandle(); 
    DS.envVar.put("parentWindow", parentWindow); 
    Thread.sleep(5000); 
    System.out.println(DS.envVar.get("parentWindow")); 
    } 

public static void switch_ParentWindow(String TCID,String vTCD,String vKW) throws IOException, InterruptedException, AWTException, BiffException, ParseException{ 

    driver.close(); 
    String parentWindow = DS.envVar.get("parentWindow"); 
    System.out.println(DS.envVar.get("parentWindow")); 
    driver.switchTo().window(parentWindow); 
    driver.switchTo().defaultContent(); 
    Thread.sleep(5000); 
    } 

Может кто-нибудь помочь мне в этом вопросе?

ответ

1

Я подозреваю, что элемент управления находится на родительском окне, когда driver.close(); выполнен в switch_ParentWindow метод. Я хотел бы предложить, что вы храните окна ручки после того, как вы нажмете на URL в окне, что приведет к открытию нового окна, т.е. на шаге 2. Вы можете сделать, используя следующий код:

Set<String> handles = driver.getWindowHandles(); 
Iterator<String> itr = handles.iterator(); 
String parentWindow = itr.next(); 
String newWindow = itr.next(); 

Всякий раз, когда вам нужно чтобы закрыть новое окно, во-первых, убедитесь, что фокус находится в новом окне, а затем закройте его. Вы можете сделать это, используя следующий код:

driver.switchTo().window(newWindow); 
driver.close(); 

Вы можете перейти в родительское окно и продолжить выполнение необходимых действий. Вы можете переключиться на родительское окно, используя следующий код:

driver.switchTo().window(parentWindow); 

Сообщите мне, если у вас есть дополнительные вопросы.

0

Попробуйте этот код ниже.

String winHandleBefore = driver.getWindowHandle(); 
for(String winHandle : driver.getWindowHandles()) // Switch to new window opened. 
{ 
    driver.switchTo().window(winHandle); 
}  
driver.switchTo().window(winHandleBefore);   // move to previously opened window. 
+0

Ваш код не работал для меня, так как мне они нужны в двух разных шагах. Кстати, у меня нет проблемы с захватом дескриптора родительского окна или переключением в новое окно и его закрытием. Единственная проблема заключается в том, что я не могу вернуться в окно родителя после закрытия нового окна. – xxan

+0

Для возврата в предыдущее окно используйте окно 'driver.switchTo(). Window (winHandleBefore);' –

+0

Я тоже пробовал, что не повезло. Спасибо за ваш ответ – xxan

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