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>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM