selenium2.0 处理各种窗口问题解决方法
2016-10-31 13:46 xlmig 阅读(2054) 评论(0) 编辑 收藏 举报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>