Selenium的自我總結1

tao先生發表於2015-09-18

       搞了一段時間的Selenium Web的自動化,針對專案要搭建了一套適合專案的測試框架(Selenium[POM/DataDriver]+TestNG+Ant+Jenkins)。在最開始看Selenium的時候也是滿論壇的找資料學習,現在總是在想能不能搞一些適合新手入門的東西出來,當然個人能力也是有限的,只能嘗試著去整理,也算是對自己學習過程的一個總結吧。下面的內容都是自己經驗性的總結,有不對的地方歡迎大家拍磚,也算是共同學習共同進步啊。。。

    Selenium是什麼?

    關於Selenium的介紹網上一大堆,我也不在這裡複製貼上了。我理解的簡單一句話,“Selenium就是適合於Web測試的一個框架”,支援多語言(Java、Python、C#、Ruby等等),跨平臺,多瀏覽器等等特性。為大家實現Web自動化測試多了一條路來選擇。在這裡多插一句話,自動化測試代替不了手工測試,只有你瞭解產品的需求才能寫出完善的自動化測試指令碼,還有如果想了解一樣東西,官網還是最牛逼的地方,由於長城防火牆的存在,所以。。。懂的啊,我這邊下載了線下的官方文件,地址為:http://pan.baidu.com/s/12pX9O

好了,我也不墨跡了,整理整理乾貨吧,這個才是重點。

    瀏覽器的選擇

我們也知道了,Selenium是支援多瀏覽器的,這裡我就暫時先說說幾種在Windows下常用的瀏覽器(IE、Firefox、Chrome),由於Firefox是Selenium原生支援的瀏覽器,所以會少一些步驟,不多說了,直接上程式碼:

//Firefox安裝在預設路徑下時,下面就能將Firefox啟動起來
Webdriver driver = new FirefoxDriver();

//Firefox如果沒有安裝預設路徑下,這個時候需要首先指定Firefox安裝的路徑
System.setProperty("webdriver.firefox.driver","Path of firefox\\\\firefox.exe");
Webdriver driver = new FirefoxDriver();

//對於IE瀏覽器,首先得下載IEDriver的外掛
System.setProperty("webdriver.ie.driver", "Path of location\\IEDriverServer.exe");
Webdriver  driver = new InternetExplorerDriver();

//對於Chrome瀏覽器,也一樣首先需要下載chrome外掛
System.setProperty("webdriver.chrome.driver","path of location\\chromedriver.exe");
Webdriver driver = new ChromeDriver();

   開啟指定的網頁

開啟具體的網站進行測試,

WebDriver driver = new FirefoxDriver();

//開啟網頁的第一種方式,建立一個Navigation物件
        
        //建立一個Navigation物件
        Navigation navigation = driver.navigate();
        //前往百度首頁
        navigation.to("http://www.baidu.com/");
        //重新整理當前頁面
        navigation.refresh();
        //返回之前的頁面
        navigation.back();
        
//開啟某個網頁的第二種方式,
        
        driver.get(http://www.baidu.com/);

 

查詢定位物件元素

不管你在Web頁面做什麼操作,首先我們得定位到這個元素物件,在Selenium提供的API中提供了一個By的物件類,這樣我們通過條件物件“By”就能對元素物件進行定位。那麼首先我們得了解下Selenium給我們提供了下面8種定位元素的方法:

  1. By.className("className"); //通過HTML 中的class來定位到指定的元素
  2. By.cssSelector("cssPath"); //通過css路徑來定位指定的元素,接下來有時間可以總結下關於cssPath和xpath的定位
  3. By.id("idName"); //通過HTML的ID來定位到指定的元素
  4. By.linkText("linkText"); //通過HTML中連結文字來進行連結
  5. By.name("name");  //通過HTML中的name元素值來進行定位
  6. By.partialLinkText("partialLinkText");  //通過連結文字的部分值來進行定位
  7. By.tagName("tagName"); //通過HTML中的tag值來進行定位
  8. By.xpath("xpathPath");  //通過xpath來進行定位,

下面的例子也已百度首頁為例子來進行說明。

比如定位百度搜尋的輸入框(火狐上可以下載兩個外掛工具,FireBug+FirePath,來幫助定位元素)

bd1

輸入框元素:

<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd"/>

百度一下按鈕元素:

<input id="su" class="bg s_btn btnhover" type="submit" value="百度一下"/>

新聞連結元素:

<a class="mnav" name="tj_trnews" href="http://news.baidu.com">新聞</a>
WebDriver driver = new FirefoxDriver();driver.get("http://www.baidu.com/");
        By by = null;
        
        //通過ID定位輸入框
        WebElement elementInput = driver.findElement(by.id("kw"));
        //通過classname來定位提交按鈕元素
        WebElement elementBtn = driver.findElement(by.className("bg s_btn btnhover"));
        //通過linkText來定位右上方的“新聞”連結
        WebElement elementLink = driver.findElement(by.linkText("新聞"));
       //通過xpath來定位HAO123連結
        WebElement elementHao123 = driver.findElement(by.xpath(".//*[@id='u1']/a[2]"));
       //通過csspath來定位登陸按鈕
        WebElement elementMap = driver.findElement(by.cssSelector(".lb"));

        上面寫了幾種方式來定位元素,大家感受下這些定位元素的方式,關於xpath和cssSelector的定位,以後有時間在說說。Selenium在這裡提供了findElement的方法來方便查詢元素。

       就在專案中的感受來講,如果框架搭建完成以後,定位元素將是一項最大的工程了,所以在這裡應該好好看看,方便接下來的學習。

操作元素以及獲取頁面相關元素值

        元素我們找到了,接下來我們就應該對我們找到的元素進行操作,那麼Selenium又為我們封裝了哪些基本的操作方法呢?比如說,我們對元素進行點選,輸入框輸入值,下拉框選擇某個元素等等操作,有時候我們在驗證頁面是否滿足需求的時候,我們也需要獲取元素的相關值與預期值來進行比較。

       下面我只是簡單的列出一些基本方法來說明一些小問題,讓新手有個大概的瞭解,然後在以具體的頁面來進行操作。讓大家有個具體清晰的認識

      //清空輸入框的內容
        elementInput.clear();
       //輸入相關的值
        elementInput.sendKeys("test input text"); 
        //點選按鈕
        elementBtn.click();
        //獲取文字框的值
        elementBtn.getText();
        //獲取到具體的連結地址
        elementHao123.getAttribute("href");

    當然有些時候這些簡單的操作是不能完成一些動作的,比如我們移動滑鼠到某個元素上:
   

//建立一個Actions的類,然後根絕要執行的操作進行對應的複雜操作
           Actions action = new Actions(driver);
         action.moveToElement(elementBtn).build().perform();

警告框的處理

     在操作Web頁面的時候,最常見的彈框應該是警告框的彈出,提醒客戶同不同意之類的警告框,遇到這種對話方塊的時候,該如何處理呢?Selenium提供了一個Alert的類,幫助我們來對警告框進行處理。

//定位到Alert對話方塊上
        Alert alert = driver.switchTo().alert();
        //獲取Alert對話方塊的內容
        alert.getText();
        //接受警告框的內容,並關閉該對話方塊
        alert.accept();
        //不同意警告框的內容,並關閉該對話方塊
        alert.dismiss();

多對話方塊的處理

       在很多情況下,我們在開啟另一個頁面的時候,它是會彈出另外一個新的對話方塊頁面,如何定位到新的對話方塊上來呢?這個時候出現了一個概念就是對話方塊的控制程式碼,每個對話方塊都有一個唯一的識別符號那就是控制程式碼,我們可以通過控制程式碼的定位到當前的對話方塊上。Selenium提供了一個方法,driver.switchTo().window(“valueOfHandle”),通過傳入新視窗的控制程式碼從而定位到新的視窗上,然後就能對新視窗進行對應的操作。

 
//得到當前視窗的控制程式碼
        String currentHandle = driver.getWindowHandle();
        
        //得到所有視窗的控制程式碼
        Set<String> handles = driver.getWindowHandles();
        
        //建立一個迭代器
        Iterator<String> iterator = handles.iterator();
        
        //實現迭代
        while(iterator.hasNext()){
                       
            String handle = iterator.next();
            
            //和當前視窗的控制程式碼作比較,如果和當前視窗控制程式碼相同,就將當前視窗控制程式碼傳給Selenium
            if(currentHandle.equals(handle)){
                
                driver.switchTo().window(handle);
                
                System.out.println("Current Window URL is: " + driver.getCurrentUrl());
                
            }
            
        }
 

關閉視窗以及隱性等待時間的操作

 

//等待時間的設定,隱性時間的等待設定,是貫穿於這個類的整個生命週期的,不是針對某一點上,在Selenium的操作的過程中,這個等待時間都是生效的
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        
        //關閉所有視窗
        driver.quit();
        
        //關閉當前定位的視窗
        driver.close();

 

今天就到這,後續會針對一個簡單的頁面,將上面的所有操作彙總下。

相關文章