如何使用Selenium Java获取新打开的IE窗口的浏览器句柄

如何使用Selenium Java获取新打开的IE窗口的浏览器句柄,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我正在使用SeleniumJava进行自动化测试。对于我的场景,首先打开登录页面,在提供凭据并单击登录按钮后,当前浏览器(带有登录页面)关闭,并打开带有主页的新IE窗口。在java代码中,我得到了带有登录页面url的驱动程序,从那里提供用户名和pwd,然后单击登录页面工作正常,但之后当页面关闭,新的IE窗口打开时,我试图在主页上工作,我得到的是noSuchWindowException或类似的空句柄。你能帮我弄一个新的主页窗口把手吗 我的代码如下: ... System.setProperty(

我正在使用SeleniumJava进行自动化测试。对于我的场景,首先打开登录页面,在提供凭据并单击登录按钮后,当前浏览器(带有登录页面)关闭,并打开带有主页的新IE窗口。在java代码中,我得到了带有登录页面url的驱动程序,从那里提供用户名和pwd,然后单击登录页面工作正常,但之后当页面关闭,新的IE窗口打开时,我试图在主页上工作,我得到的是noSuchWindowException或类似的空句柄。你能帮我弄一个新的主页窗口把手吗

我的代码如下:

...
System.setProperty("webdriver.ie.driver", pathToDriver);
driver = new InternetExplorerDriver();

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("<Login Page URL>");

driver.findElement(By.id("userName")).sendKeys("Admin");
driver.findElement(By.id("password")).sendKeys("Admin");
driver.findElement(By.className("loginButton")).click();

driver.get("<Home Page URL>");
...
。。。
System.setProperty(“webdriver.ie.driver”,pathToDriver);
驱动程序=新的InternetExplorerDriver();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
驱动程序。获取(“”);
driver.findElement(By.id(“用户名”)).sendKeys(“管理员”);
driver.findElement(By.id(“密码”)).sendKeys(“管理员”);
driver.findElement(By.className(“loginButton”)).click();
驱动程序。获取(“”);
...
谢谢


Surodip

在调用获取主页句柄的操作时,需要检查从登录页面到主页的导航是否在时间内完成。您可能需要使用Wait延迟呼叫。

更简单的解决方案可能是:

driver.SwitchTo().Window(driver.WindowHandles.Last());

.Last()将切换到最近打开的窗口,该窗口应该是您单击链接时刚刚打开的窗口。

Selenium driver.getWindowHandles()将返回Set,并且除了TreeSet之外,没有Set方法来获取最后一个窗口句柄,因此转换并使用其Last()方法来使用

String lastWindowHandle = new TreeSet<>(driver.getWindowHandles()).last()
driver.SwitchTo().Window(lastWindowHandle);
String lastWindowHandle=新树集(driver.getWindowHandles()).last()
driver.SwitchTo().Window(lastWindowHandle);

如果新的IE窗口打开,为什么要执行
驱动程序。获取(“”)?实际上我想获得新打开的窗口/页面的控件/句柄,所以我试图通过驱动程序来实现;但在那一点上,我得到了错误。因此,该声明是错误的,需要做一些其他事情,但无法得到什么。谢谢Sumit…将尝试检查您的解决方案Viki…谢谢