zoukankan      html  css  js  c++  java
  • selenium2.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>
  • 相关阅读:
    DecimalPercentageConverter
    Asp.Net 性能 ViewState 压缩的2种方法
    Listbox template
    Datagrid template for listbox and textbox
    ToPercentConverter : IValueConverter
    繁體中文
    Silverlight ComboBox 设置选中项
    鲁迅:纪念刘和珍君
    ASP.NET系统整合DiscuzNT3.6之注意事项
    [转]js动态创建json类型
  • 原文地址:https://www.cnblogs.com/jenniferhuang/p/3457107.html
Copyright © 2011-2022 走看看