Java PhantomJSDriver:无法切换到新打开的浏览器窗口

Java PhantomJSDriver:无法切换到新打开的浏览器窗口,java,selenium-webdriver,phantomjs,ghostdriver,Java,Selenium Webdriver,Phantomjs,Ghostdriver,我一直在尝试使用PhantomJSWebDriverframework来自动化使用Headless浏览器的应用程序。主要的问题是,我们可以在firefox或IE窗口中成功切换窗口,在这里,我无法基于句柄在窗口之间切换。请帮帮我 下面是我迄今为止尝试过的代码 System.setProperty("phantomjs.binary.path", file.getAbsolutePath()); driver = new PhantomJSDriver();

我一直在尝试使用
PhantomJSWebDriver
framework来自动化使用Headless浏览器的应用程序。主要的问题是,我们可以在firefox或IE窗口中成功切换窗口,在这里,我无法基于句柄在窗口之间切换。请帮帮我

下面是我迄今为止尝试过的代码

    System.setProperty("phantomjs.binary.path", file.getAbsolutePath());        
    driver = new PhantomJSDriver();  
    driver.get(application url);          

    driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);

    WebElement txtUsername = driver.findElement(By.id("it_C_C5"));        
    txtUsername.sendKeys("sreenis");        
    WebElement txtPassword = driver.findElement(By.id("it_C_C7"));
    txtPassword.sendKeys("sreeni");
    WebElement btnLogin = driver.findElement(By.id("ic_C_C8"));        
    btnLogin.click();

    Thread.sleep(10000);

    String winTitle = "Role profile selection";

    boolean bool = switchWindow(winTitle);
    if (bool){
        System.out.println("Page title is: " + driver.getTitle());
        driver.quit();     
    }
    else {
        System.out.println("Switch to window '" + winTitle + "' failed!");
        driver.quit();
    }

 public static boolean switchWindow(String windowtitle){

    String mainWindowsHandle = driver.getWindowHandle();
    Set<String> handles = driver.getWindowHandles();
    System.out.println(handles.size());
    for(String winHandle : handles){            
        driver.switchTo().window(winHandle);
        System.out.println(driver.getTitle());
        if(driver.getTitle().toLowerCase().equals(windowtitle)){
            return true;
        }           
    }

    driver.switchTo().window(mainWindowsHandle);
    return false;
}
System.setProperty(“phantomjs.binary.path”,file.getAbsolutePath());
driver=新的PhantomJSDriver();
get(应用程序url);
driver.manage().timeouts().implicitlyWait(100,TimeUnit.SECONDS);
WebElement txtUsername=driver.findElement(By.id(“it_C_C5”);
txtUsername.sendKeys(“sreenis”);
WebElement txtPassword=driver.findElement(By.id(“it_C_C7”);
txtPassword.sendKeys(“sreeni”);
WebElement btnLogin=driver.findElement(By.id(“ic_C_C8”);
btnLogin.click();
睡眠(10000);
字符串winTitle=“角色配置文件选择”;
布尔布尔布尔=开关窗口(winTitle);
如果(bool){
System.out.println(“页面标题为:“+driver.getTitle());
driver.quit();
}
否则{
System.out.println(“切换到窗口”’+winTitle+“‘失败’”);
driver.quit();
}
公共静态布尔开关窗口(字符串窗口标题){
字符串mainWindowsHandle=driver.getWindowHandle();
Set handles=driver.getWindowHandles();
System.out.println(handles.size());
对于(字符串winHandle:handles){
driver.switchTo()窗口(winHandle);
System.out.println(driver.getTitle());
if(driver.getTitle().toLowerCase().equals(windowtitle)){
返回true;
}           
}
driver.switchTo().window(mainWindowsHandle);
返回false;
}
当我试图打印集合中的窗口标题时,它只打印父窗口,而不打印其他窗口。我无法猜测发生了什么,因为什么都看不见,这是无头测试。请告诉我是否有其他方法可以使用多个浏览器窗口测试应用程序。

Actions act=new Actions(d);
Actions act = new Actions(d);
    act.contextClick(elements).sendKeys("W").perform();

    Set<String> win = d.getWindowHandles();
    Iterator <String> itrwin = win.iterator();
    String parent = itrwin.next();
    String child = itrwin.next();
    d.switchTo().window(child);
act.contextClick(元素).sendKeys(“W”).perform(); 设置win=d.getWindowHandles(); 迭代器itrwin=win.Iterator(); 字符串parent=itrwin.next(); String child=itrwin.next(); d、 切换到()窗口(子窗口);

首先使用findElement()识别web元素并将其存储在元素中。

控制台上出现了什么错误?您可能希望提供堆栈跟踪。没有错误,但无法在窗口句柄集合中找到要切换的窗口。你试过这个吗?如果是,请告诉我我犯了什么错误。我甚至添加了线程。睡眠(10000):(您正在使用哪个浏览器。是IE吗???@AkhilK:它是PhantomJS没有浏览器可见,它是无头浏览器测试。@harsha.cs,您怎么知道,它找不到窗口,它一定抛出了一个错误,对不对?我能得到日志的跟踪吗?Pankaj:不,它不工作。它显示的是同一个旧窗口处理程序:(