1

IE9でアプリケーションをテストするためにSelenium2+ Javaを使用しています。リンクをクリックすると、ポップアップウィンドウが開きます。ポップアップウィンドウに移動するには、switchTo.windowメソッドを使用します。しかし、戻ろうとすると、この操作でテストが遅れて続行しません。

いくつかのコード:

link.click(); //Open pop-up window    
Object[] windows = driverIE.getWindowHandles().toArray();    
driverIE.switchTo().defaultContent();    
driverIE.switchTo().window(windows[1].toString());  //Focus on pop-up window    
.....    
mainWindowHandle = driverIE.getWindowHandles().iterator().next();   //Handle of main window    
driverIE.switchTo().window(mainWindowHandle);   //Fail!    

問題を解決するのを手伝ってください。

4

2 に答える 2

2

によって返される Windows ハンドルはgetWindowHandles()、任意の順序であるとは限りません。windows[1]つまり、開いているウィンドウのウィンドウ ハンドルを含めるために、上記のコード サンプルに依存することはできません。むしろ、次のようなコードが必要です (注:完全にテストされていないコードです!):

String mainHandle = driver.getWindowHandle();

// Do whatever you need to do to open a new window,
// and properly wait for the new window to appear...

Set<String> allHandles = driver.getWindowHandles();
for(String currentHandle : allHandles) {
  // Note that this is cheating a bit. It will only
  // work with a total of two windows. If you have
  // more than two windows total, your logic here
  // will have to be a little more sophisticated.
  if (!currentHandle.equals(mainHandle)) {
    driver.switchTo().window(currentHandle);
    break;
  }
}

// Work with popup window...
// Close the popup window and switch context back
// to the main window.
driver.close();
driver.switchTo().window(mainHandle);
于 2012-05-25T11:49:18.203 に答える
0

JimEvans が述べたように、driver.getWindowHandles() はウィンドウを間違った順序で配置することがあるため、for ループが常に機能するとは限りません。

上記と同様に機能しました(処理するウィンドウは2つしかありません):

    String winHandleBefore = driver.getWindowHandle();

    driver.findElement(By.cssSelector("a")).click();

    Set<String> winHandle = driver.getWindowHandles();

    winHandle.remove(winHandleBefore);

    String winHandleNew = winHandle.toString();

    String winHandleFinal = winHandleNew.replaceAll("\\[", "").replaceAll("\\]","");

    driver.switchTo().window(winHandleFinal);
于 2015-02-25T10:49:33.040 に答える