selenium webdriver学習(六)------どうやってポップアップウィンドウを得るか?

2766 ワード

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の方法は、前のウィンドウのハンドルが目的を達成することができます.
 
 
------------------2102年6月20日
PS:今日はwhileのコードに問題があります.元のものから:
 
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が二回あります.もう一回取ります.