Невозможно переключиться на родительское окно, говоря, что окно закрыто - PullRequest
0 голосов
/ 13 октября 2018

Я тестирую на IE.После нажатия я переключаюсь на дочернее окно, но не могу вернуться к родительскому окну с сообщением об ошибке «Окно закрыто».

String parent= driver.getWindowHandle(); //after clicking new window pop up
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("(//a[@href='javascript:submitExport()'])[5]"))).click();
System.out.println("parent"+parent);

for (String child : driver.getWindowHandles()) {
   System.out.println("child"+child);
   if(!parent.equalsIgnoreCase(child))
   {
    driver.switchTo().window(child);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[contains(.,'Export')]")));

    WebElement ele=driver.findElement(By.xpath("//a[contains(.,'Export')]"));

    ele.click();
   }

}
System.out.println("current handles"+driver.getWindowHandle());
driver.close();
System.out.println("current handles"+driver.getWindowHandle());
driver.switchTo().window(parent);

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Вы можете сослаться на эту логику,

//It will open new tab using Javascript
((JavascriptExecutor) driver).executeScript("window.open()");

//Manage to switch driver on newly opened tab
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(tabs.size() - 1));

//Manage to switch driver on existing old tab
driver.close();
driver.switchTo().window(tabs.get(tabs.size() - 2));
0 голосов
/ 15 октября 2018

просто внимательно посмотрите код,

System.out.println("current handles"+driver.getWindowHandle());
driver.close();
System.out.println("current handles"+driver.getWindowHandle());
driver.switchTo().window(parent);

похоже, что вы вызываете switchTo (). Window (parent) после закрытия драйвера.
driver.close () Этот метод закрываетокно браузера, на котором установлен фокус.
Возможно, это проблема, которую вы пытаетесь закрыть дочерним браузером, но это может привести к ложному закрытию родительского элемента или из-за некоторых действий, которые они могут автоматически закрыть.используйте только когда открыто несколько окон браузера.
не закрывайте драйвер перед вызовом switchTo ().

Я надеюсь, что это может сработать для вас,

System.out.println("current handles"+driver.getWindowHandle()); 
driver.switchTo().window(parent);   
System.out.println("current handles"+driver.getWindowHandle());    
driver.close();

базовым способом,

Вы можете использовать набор для хранения, вести запись и итератор для его итерации,

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("(//a[@href='javascript:submitExport()'])[5]"))).click()
Set <String> handles =driver.getWindowHandles(); // take all window info
Iterator<String> it = handles.iterator();
String parent = it.next(); // store
String child = it.next(); // store
driver.switchTo().window(child); // switching
driver.close(); // close child window
driver.switchTo().window(parent); // switching
driver.quit(); // close 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...