selenium2.0 处理各种窗口问题解决方法
2013-12-04 10:42
471 查看
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
下面是具体实例操作代码:
上面代码所操作的 页面的源代码示例:AlertConfirmPromptPage.html
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>
相关文章推荐
- selenium2.0 处理各种窗口问题解决方法
- selenium IDE处理各种窗口问题解决方法
- 解决Selenium Webdriver执行测试时,每个测试方法都打开一个浏览器窗口的问题
- 多线程委托之跨线程问题分析--在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(解决方法已更新)
- JavaScript页面刷新与弹出窗口问题的解决方法
- python之xml文件处理的例子-问题描述及解决方法
- Selenium的getXpathCount方法的实际问题解决
- Hadoop关于处理大量小文件的问题和解决方法
- 邮件系统安装与使用过程中各种报错与问题的详细解决方法
- SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
- WEB开发各种问题及解决方法汇总
- ORA-14450: 试图访问已经在使用的事务处理临时表,根据网上文章提供的方法,问题是解决了
- 添加/删除程序空白窗口及控制面板窗口显示异常问题的解决方法
- 各种导致xp系统宽带连接速度慢问题的原因及解决方法
- JavaScript页面刷新与弹出窗口问题的解决方法
- win2003出现各种硬件故障问题时的处理方法
- Windows 7安装MSN问题,关闭后主窗口停留在任务栏中解决方法
- WEB全能服务器总结,及各种问题处理方法.apache+tomcat+jsp+php+mysql+虚拟主机
- JS窗口问题处理:使弹出窗口保持前端显示的几种方法,及window窗体对象open()和showModalDialog()用法
- 初学大数据之模块集成:Pycharm安装numpy,scipy,sklearn等包时遇到的各种问题的一键解决方法