1. 方案一:
当测试页面同时出现2个或者以上窗口时候,而且新打开的window没有namem,可以使用driver.switchTo().window(winHandleID)来进行切换,如下代码已经在IE8中测试通过:
- //Store the current window handle
- String winHandleBefore = driver.getWindowHandle();
- //Switch to new window opened
- for(String winHandle : driver.getWindowHandles()){
- System.out.println("+++" + winHandle);
- driver.switchTo().window(winHandle);
- }
- // Close the original window
- driver.switchTo().window(winHandleBefore);
- driver.close();
- //Switch to new window opened
- for(String winHandle : driver.getWindowHandles()){
- System.out.println("+++" + winHandle);
- driver.switchTo().window(winHandle);
- }
当最后只有一个窗口剩下的时候,应该可以直接使用
driver.switchTo().window(driver.getWindowHandle)
去选中新的窗口
2. 方案二:
在webdriver官方的api中,切换窗口的方法提供的参数是nameOrHandle。
Switch the focus of future commands for this driver to the window with the given name/handle.
但是在实际运用中,更多的可能是需要根据新窗口的title去切换窗口。因此封装了如下方法:
- public boolean switchToWindow(WebDriver driver,String windowTitle){
- boolean flag = false;
- try {
- String currentHandle = driver.getWindowHandle();
- Set<String> handles = driver.getWindowHandles();
- for (String s : handles) {
- if (s.equals(currentHandle))
- continue;
- else {
- driver.switchTo().window(s);
- if (driver.getTitle().contains(windowTitle)) {
- flag = true;
- System.out.println("Switch to window: "
- + windowTitle + " successfully!");
- break;
- } else
- continue;
- }
- }
- } catch (NoSuchWindowException e) {
- System.out.println("Window: " + windowTitle
- + " cound not found!", e.fillInStackTrace());
- flag = false;
- }
- return flag;
- }
首先获取当前driver驱动的所有窗口的handle然后进行比对筛选,如果窗口的title符合预期,则切换,并返回true,反之则返回false。
3. 方案三:
public static WebDriver switchWindows(WebDriver dr) {
WebDriver window;
String currentWindow = dr.getWindowHandle();
Set<String> handles = dr.getWindowHandles();
Iterator<String> it = handles.iterator();
while (it.hasNext()) {
if (currentWindow == it.next())
continue;
window = dr.switchTo().window(it.next());
// dr.manage().window().maximize();
return window;
}
return null;
}