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;
}