Java 如何关闭firefox中使用webdriver从div中提取元素后打开的新窗口?

Java 如何关闭firefox中使用webdriver从div中提取元素后打开的新窗口?,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,Webdriver在执行单击操作后启动多个窗口。我尝试了driver.close(),但它关闭了webdriver,测试失败 WebDriver driver = new FirefoxDriver (); driver.get("http://www.xyz.com/"); JavascriptExecutor js = (JavascriptExecutor) driver; WebElement page = driver.findElem

Webdriver在执行单击操作后启动多个窗口。我尝试了driver.close(),但它关闭了webdriver,测试失败

            WebDriver driver = new FirefoxDriver ();
    driver.get("http://www.xyz.com/");
    JavascriptExecutor js = (JavascriptExecutor) driver;

    WebElement page = driver.findElement(By.className("coupon-rows"));

          List <WebElement>  coupontrigger = page.findElements(By.className("code"));
              System.out.println("number of couponsTriggers on carousel = "+ "coupontrigger.size());

   for (int j=0; j<=coupontrigger.size(); j++) {


      js.executeScript("$('.ccode.coupon-trigger').eq("+j+").click()");

      System.out.println(driver.getTitle());

      driver.switchTo().defaultContent();

      driver.get("http://www.xyz.com/");
      page = driver.findElement(By.className("coupon-rows"));
      coupontrigger = page.findElements(By.className("code"));

     }
}
WebDriver=newfirefoxdriver();
驱动程序。获取(“http://www.xyz.com/");
JavascriptExecutor js=(JavascriptExecutor)驱动程序;
WebElement页面=driver.findElement(按.className(“优惠券行”);
List coupontrigger=page.findElements(按.className(“代码”);
System.out.println(“转盘上的耦合触发器数量=”+“耦合触发器.大小());

对于(int j=0;j如果我了解您的要求,您希望关闭其他弹出窗口而不是主窗口。在这种情况下,您可以执行以下操作。尽管我不能100%确定您的要求

String mwh=driver.getWindowHandle(); // Get current window handle
Set<String> s=driver.getWindowHandles();
Iterator<String> ite=s.iterator();
String popupHandle = "";
while(ite.hasNext())
{
    popupHandle = ite.next().toString();
    if(!popupHandle.contains(mwh)) // If not the current window then shift focus and close them
    {
         driver.switchTo().window(popupHandle);
         driver.close();
    }
 }
 driver.switchTo().window(mwh); // finally move control to main window.
String mwh=driver.getWindowHandle();//获取当前窗口句柄
设置s=driver.getWindowHandles();
迭代器ite=s.Iterator();
字符串popupHandle=“”;
while(ite.hasNext())
{
popupHandle=ite.next().toString();
如果(!popupHandle.contains(mwh))//如果不是当前窗口,则移动焦点并关闭它们
{
driver.switchTo()窗口(popupHandle);
driver.close();
}
}
driver.switchTo().window(mwh);//最后将控件移动到主窗口。

您可以引入一个帮助器方法来为您完成该任务。您只需找出当前视图是什么(
WebDriver\getWindowHandle
将给出您关注的视图),然后关闭其余窗口即可

private String closeAllpreviouslyOpenedWindows() {
    String firstWindow = webDriver.getWindowHandle();
    Set<String> windows = webDriver.getWindowHandles();
    windows.remove(firstWindow);
    for (String i : windows) {
        webDriver.switchTo().window(i);
        webDriver.close();
    }
    webDriver.switchTo().window(firstWindow);
    return firstWindow;
}
private String closeAllpreviouslyOpenedWindows(){
字符串firstWindow=webDriver.getWindowHandle();
设置windows=webDriver.getWindowHandles();
删除(第一个窗口);
用于(字符串i:windows){
webDriver.switchTo().window(i);
webDriver.close();
}
webDriver.switchTo().window(firstWindow);
返回第一窗口;
}

除了在脚本中使用Firefoxdriver外,它是否会打开一个新的firefox窗口?谢谢你的回复,是的,它会打开一个新的firefox窗口。可能与感谢Paul一样。这工作非常完美。我非常感谢你的努力和时间。谢谢Petr你的代码工作得非常好。它真的很有帮助。非常感谢你的时间和努力吃了它!不客气!如果你喜欢,你甚至可以投票支持我的答案:-)我需要15个声誉来支持你的答案目前我只有3个。但将来我会这么做的!再次感谢。