【问题标题】:Handling window in Selenium WebDriver using Java使用 Java 处理 Selenium WebDriver 中的窗口
【发布时间】:2018-03-03 03:14:32
【问题描述】:

通过 Selenium WebDriver 进行自动化时,我有以下场景。

在一个窗口上,我点击一个按钮。代码将对 DB 进行查询并显示一个包含其结果的窗口。 我无法切换到新窗口。 单击按钮时父窗口关闭,我无法切换到新窗口,因为控件位于父窗口上,并且在屏幕上不可见。

有人可以帮我解决这个问题吗? 谢谢

我的代码如下:

driver.findElement(By.xpath(".//*[@id='WIN_0_560700305']/div/div")).click();
window1=driver.getWindowHandle();
driver.switchTo().window(window1);
System.out.println(driver.getTitle());
windowList = driver.getWindowHandles();
System.out.println("Number of Windows-->" + driver.getWindowHandles().size());
iterator = windowList.iterator();
String window2 = null;
while(iterator.hasNext())
{
    System.out.println("Entering while loop");
    window2 = (String)iterator.next();
    System.out.println(driver.getTitle());
}
if (!(window1.equals(window2))){
    driver.switchTo().window(window2);
    System.out.println("Title of the page after - switchingTo: " +
        driver.getTitle());
    System.out.println("Current url" + driver.getCurrentUrl());
    driver.manage().window().maximize();
}
driver.findElement(By.xpath(".//*[@id='WIN_0_540000016']/div/div")).click();

【问题讨论】:

  • 子窗口在父窗口关闭之后或之前打开?
  • 数据库查询完成,然后打开子窗口。父窗口被隐藏,焦点仍然在父窗口上。不知道该怎么办?

标签: java selenium-webdriver


【解决方案1】:

我已经稍微修改了你的代码,试试下面的代码,希望它能工作。

String window1=driver.getWindowHandle();
driver.findElement(By.xpath(".//*[@id='WIN_0_560700305']/div/div")).click();
System.out.println(driver.getTitle());
Set windowList = driver.getWindowHandles();
Iterator iterator = windowList.iterator();
String window2 = null;
while(iterator.hasNext())
{
    System.out.println("Entering while loop");
    window2 = iterator.next().toString();
    if(!(window1.equals(window2))){
       driver.switchTo().window(window2);
       System.out.println("Title of the page after - switchingTo: " +          
       driver.getTitle());
       System.out.println("Current url" + driver.getCurrentUrl());
       driver.manage().window().maximize();
    }
}
//Switched to new window, do operations in new window    ..

【讨论】:

  • 这是输出。当 while 循环运行时,所有窗口名称都相同。我的意思是焦点仍然在父窗口上。请帮助。Windows 数量-->3 Dsp_KIA_AssetSearch Dsp_KIA_AssetSearch Dsp_KIA_AssetSearch 线程“主”org.openqa.selenium.NoSuchElementException 中的异常:无法找到xpath == 的元素。//*[@id='WIN_0_540000016'] /div/div(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:315 毫秒
最近更新 更多