selenium webdriverはどうやってポップアップウィンドウを得ますか?
2883 ワード
selenium 1.Xの中でポップアップウィンドウを得るのは面倒くさいです.特に新しく開けた窓にはid、nameがない時があります.当時はいくつかの方法を整理しました.http://seleniumcn.cn/read.php?tid=791 .selenium webdriverでは、新しいオープンウィンドウのID、nameなどの属性は関係なく、比較的簡単にオープンウィンドウを得ることができます.以下のhtmlを例に挙げます.
test.html
Test Popup Window
Let's go
次のコードは、どうやってポップアップされた新しいウィンドウを得るかを示しています.import java.util.Iterator;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PopupWindowTest {
/**
* @author gongjf
*/
public static void main(String[] args) {
System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");
WebDriver dr = new FirefoxDriver();
String url ="\\Your\\Path\\to\\main.html";
dr.get(url);
dr.findElement(By.id("51")).click();
//
String currentWindow = dr.getWindowHandle();
//
Set handles = dr.getWindowHandles();
Iterator it = handles.iterator();
while(it.hasNext()){
String handle = it.next();
if(currentWindow.equals(handle)) continue;
WebDriver window = dr.switchTo().window(handle);
System.out.println("title,url = "+window.getTitle()+","+window.getCurrentUrl());
}
}
}
title,url = 51.com ,http://www.51.com/
ポップアップウィンドウをキャプチャまたは特定する鍵は、ポップアップウィンドウのハンドルを得ることにある.(ハンドルの理解はブラウザのウィンドウの唯一の標識です.以前に「キー精霊」を遊んでいたことを覚えています.)上のコードの中で、windowhandle方法を使って、現在のブラウザウィンドウのハンドルを取得して、windowhandles方法を使って、すべてのブラウザウィンドウのハンドルを取得しました.そして、現在のハンドルを排除する方法で、新しいウィンドウのハンドルを取得します.新しいポップアップウィンドウのハンドルを取得した後、switch.window(newwindow uhandle)方法を使って、新しいウィンドウのハンドルをパラメータとして導入し、新しいウィンドウにキャプチャできます.前のウィンドウの位置決め要素に戻りたいなら、もう一度スイッチを呼びます.to.windowの方法は、前のウィンドウのハンドルが目的を達成することができます.while(it.hasNext()){
if(currentWindow == it.next()) continue;
WebDriver window = dr.switchTo().window(it.next());
System.out.println("title,url = "+window.getTitle()+","+window.getCurrentUrl());
}
変更:while(it.hasNext()){
String handle = it.next();
if(currentWindow.equals(handle)) continue;
WebDriver window = dr.switchTo().window(handle);
System.out.println("title,url = "+window.getTitle()+","+window.getCurrentUrl());
}
変更の原因:サイクルの中にit.nextが二回あります.もう一回取りました.