Вопрос:
На прилагаемом скриншоте я хочу нажать “Новое окно браузера”. Я хочу закрыть окно браузера и нажать “Новое сообщение”. Я закрыл окно браузера. Но я получаю исключение
org.openqa.selenium.NoSuchWindowException: no such window: target window already closed
Скриншот
Ниже приведены скриншоты
Ниже приведен код
@Test public void testing() { driver.manage().window().maximize(); driver.get(«http://www.seleniumframework.com/Practiceform/»); driver.findElement(By.id(«button1»)).click(); Set<String> handle=driver.getWindowHandles(); for(String handles:handle){ try{ String text=driver.switchTo().window(handles).getPageSource(); if(text.contains(«Agile Testing and ATDD Automation»)){ System.out.println(«Text found»); driver.close(); break; } }catch(Exception e){} } driver.switchTo().defaultContent(); driver.findElement(By.xpath(«//button[contains(text(),’New Message Window’)]»)).click(); driver.quit(); Ответ №1
Я думаю, вы пытаетесь вернуться в исходное окно, используя driver.switchTo().defaultContent(); ? Это неправильно.
Вам следует:
- сохранить исходное окно в начале теста:
String winHandleBefore = driver.getWindowHandle();
-
нажмите кнопку, переключите окна, сделайте что угодно
-
Для возврата в исходное окно используйте:
driver.switchTo().window(winHandleBefore);
Ответ основан на: qaru.site/questions/90036/…
Ответ №2
В вашем коде Set<String> handle=driver.getWindowHandles(); будет содержать список ручек из браузера. это также будет содержать дескриптор окна текущей вкладки в ее первой позиции.
поэтому, когда цикл выполняется в первый раз, фокус будет находиться только в текущем окне. Так как ваш код выполняет его, он закрывает текущее окно.
Вам нужно сначала обработать текущий дескриптор окна, и перед тем, как переключиться в любое окно, просто проверьте, не требуется ли окно, которое вам нужно переключить, не текущий дескриптор окна.
Посмотрите ниже пример.
String mainwindow = driver.getWindowHandle(); Set<String> handle=driver.getWindowHandles(); for(String handles:handle) { if(!mainwindow.equals(handles)){ try { String text=driver.switchTo().window(handles).getPageSource(); if(text.contains(«Agile Testing and ATDD Automation»)) { System.out.println(«Text found»); driver.close(); break; } }catch(Exception e) { } } }