selenium2.0處理muti-Windows 、 Frames 、Popup Dialogs
selenium2.0處理多窗口,彈窗等,只需要調用WebDriver 嵌套類:TargetLocator(driver.switchTo.……),如下:
driver.switchTo().window("windowName");//target="windowName" ,或者 直接都是使用獲取當前窗口句柄來定位
driver.switchTo().frame("frameName");
Alert alert = driver.switchTo().alert();
注:當 driver.switchTo().alert()得到alert后,就可以對alert做accept,dismiss,讀alert內容,或者填寫prompt,適合於alert/confirm/prompts
下面是具體實例操作代碼:
package mavenSelenium;
import java.util.Set;
import org.openqa.selenium.By;
import org.junit.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class VariableWindows extends Assert {
protected WebDriver driver;
@Before
public void setUp(){
driver=new FirefoxDriver();
}
@Test
public void test() throws Exception{
driver.get("file:///C:/Users/jennifer.huang/Desktop/AlertConfirmPromptPage.html");
//1、操作confirm彈出框
WebElement e1=driver.findElement(By.id("btnConfirm"));
e1.click();
Alert alert11=driver.switchTo().alert();
if(!alert11.getText().contains("Choose an option.")){
fail("The confirm should contains [Choose an option.]");
}
alert11.accept();
String expectString="Confirmed";
verifyResult(expectString);//驗證結果Assert.fail
e1.click();
Alert alert12=driver.switchTo().alert();
alert12.dismiss();
expectString="Rejected!";
verifyResult(expectString);
//2、操作Alert
WebElement e2=driver.findElement(By.id("btnAlert"));
e2.click();
Alert alert21=driver.switchTo().alert();
if(!alert21.getText().contains("I'm blocking")){
fail("Alert should conatins [I'm blocking]");
}
alert21.accept();
expectString="Alert is gone";
verifyResult(expectString);
//3、操作prompt
WebElement e3=driver.findElement(By.id("btnPrompt"));
e3.click();
Alert alert31=driver.switchTo().alert();
expectString="selenium2.0";
alert31.sendKeys(expectString);
alert31.accept();
verifyResult(expectString);
//4、操作新Tab
//4.1 打開新tab target="_blank"
WebElement e4=driver.findElement(By.id("linkNewWindow"));
e4.click();
changeFocus("百度一下,你就知道");
System.out.println("當前窗口title:"+driver.getTitle());
//4.2按鈕打開新窗口
changeFocus("主窗口");
System.out.println("當前窗口title:"+driver.getTitle());
WebElement e5=driver.findElement(By.id("btnNewNamelessWindow"));
e5.click();
changeFocus("博客園 - 程序員的網上家園");
System.out.println("當前窗口title:"+driver.getTitle());
//4.3按鈕打開新窗口
Thread.sleep(5000);
changeFocus("主窗口");
WebElement e6=driver.findElement(By.id("btnNewNamedWindow"));
e6.click();
changeFocus("博客園 - 程序員的網上家園");
//另外selenium2.0其他操作窗口語句有:
driver.get("http://www.google.com");//Load a new web page in the current browser window
driver.navigate().to("http://www.cnblogs.com/jenniferhuang/"); //和driver.get(“url”),都是新載一個頁面
Thread.sleep(2000);
driver.navigate().back(); //move backwards in browser’s history:
Thread.sleep(2000);
driver.navigate().forward(); //move forwards in browser’s history:
}
@After
public void tearDoown(){
driver.quit();
}
/**
* 驗證結果
* @param expectString
*/
public void verifyResult(String expectString){
String resultString=driver.findElement(By.id("output")).getText();
if(!resultString.contains(expectString)){
fail("Element [" + By.id("output") + "] should contains [" + expectString + "] ; but now it contains: " + resultString);
}
}
/**
* 窗口跳轉, 通過title來確定要跳到哪個窗口
* @param windowTitle
*/
public void changeFocus(String windowTitle){
for(String handle:driver.getWindowHandles()){
if(driver.switchTo().window(handle).getTitle().equals(windowTitle)){
driver.switchTo().window(handle);
break;
}
}
}
上面代碼所操作的 頁面的源代碼示例:AlertConfirmPromptPage.html
<!DOCTYPE HTML>
<html lang="zh-cn">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>主窗口</title>
<script type="text/javascript">
function output(resultText){
document.getElementById('output').childNodes[0].nodeValue=resultText;
}
function show_confirm(){
var confirmation=confirm("Choose an option.");
if (confirmation==true){
output("Confirmed.");
}
else{
output("Rejected!");
}
}
function show_alert(){
alert("I'm blocking!");
output("Alert is gone.");
}
function show_prompt(){
var response = prompt("What's the best web QA tool?","Selenium");
output(response);
}
function open_window(windowName){
window.open("http://www.cnblogs.com/",windowName);
}
</script>
</head>
<body>
<input type="button" id="btnConfirm" onclick="show_confirm()" value="Show confirm box" /></br>
<input type="button" id="btnAlert" onclick="show_alert()" value="Show alert" /></br>
<input type="button" id="btnPrompt" onclick="show_prompt()" value="Show prompt" /> </br>
<a href="http://www.baidu.com" id="linkNewWindow" target="_blank">New Window Link</a></br>
<input type="button" id="btnNewNamelessWindow" onclick="open_window()" value="Open Nameless Window" /></br>
<input type="button" id="btnNewNamedWindow" onclick="open_window('Mike')" value="Open Named Window" />
<br />
<span id="output">
</span>
</body>
</html>
