自動化學習從錄製開始 - Seleium IDE

       對於剛接觸到自動化的同學來說,通過錄制工具來學習自動化可能是最快捷的方式了,selenium可能也考慮到了這一點,所以很早之前就推出了一個叫Selenium IDE的工具來錄製腳本。http://docs.seleniumhq.org/download/ 可以在這個站點來下載。注意這個站點不知爲何被國內封了,我表示不太理解,所以需要翻牆,代理,VPN之類的工具來訪問並下載,當然,也可以在第三方站點找。最後更新的版本是2.9.0。
       這個工具實際上是Firefox的一個插件,所以安裝前需要先裝Firefox,實際上Selenium Web的自動化最開始是在Firefox的基礎上做的,後來兼容谷歌的Chrome以及IE,並沒有Firefox完美。

      上圖是安裝了Selenium IDE的Firefox,點擊這個按鈕就可以調出Selenium IDE。打開IDE後,錄製功能默認是打開的,最右端的紅色按鈕可以控制。用百度做例子,在Base URL中輸入http://www.baidu.com,然後在Firefox中輸入百度,輸入"test"進行搜索。這個時候切換到IDE中可以看到工具主體中有內容顯示出來,這就是錄製的結果,可以通過回放來看測試結果,這裏的回放是可以在當前的Firefox瀏覽器上重複剛纔的步驟,並生成測試結果。只是光看這個是無法瞭解腳本怎麼寫的,需要轉換成腳本。
 
       這個功能可以把這段轉換成腳本,我選擇的是Java,當然如果你熟悉Ruby,Python或者C#的話,可以轉換成對應的開發語言。可以看到這裏有Remote Control和Web Driver,RC是Selenium1,而Web Driver是另外一個公司開發的,後來的Selenium2是RC公司收購了WD後產生的,除了大幅度提高了執行效率外,整合的API也實現了很多功能,包括現在的移動端自動化。IDE因爲很久沒有更新,所以RC也沒有拿掉。
       以下代碼是剛纔錄製轉化過來的:

package com.example.tests;

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class 1 {
  private WebDriver driver;   //實例化Webdriver
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();

  @Before  //執行測試類前的操作
  public void setUp() throws Exception {
    driver = new FirefoxDriver();  //把FirefoxDriver作爲一個對象給driver,開啓Firefox瀏覽器。
    baseUrl = "https://www.baidu.com/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); //這是一個隱形等待的方法,等待頁面加載完成。
  }

  @Test
  public void test1() throws Exception {
    driver.get(baseUrl + "/");  //get 方法,是在瀏覽器中輸入指定的URL
    driver.findElement(By.id("kw")).click();  //這裏涉及到兩個方法, findElement是查找當前頁面元素,click是點擊這個元素,這個是                                                                         //WD查找並操作元素的核心部分。
    driver.findElement(By.id("kw")).clear(); //clear是清空當前元素中的文本內容  
    driver.findElement(By.id("kw")).sendKeys("test"); //sendKeys是在當前元素中輸入文本內容。
    driver.findElement(By.id("su")).click();
  }

  @After  //執行測試類後的操作
  public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }

//後面的三個方法是錄製生成的,對這條case沒有實質的意義,isElementPresent判斷指定元素是否顯示在頁面上,isAlertPresent判斷頁 //面是否有Alert彈出,closeAlertAndGetItsText關閉Alert窗口並獲取Alert的內容。
  private boolean isElementPresent(By by) {
    try {
      driver.findElement(by);
      return true;
    } catch (NoSuchElementException e) {
      return false;
    }
  }

  private boolean isAlertPresent() {
    try {
      driver.switchTo().alert();
      return true;
    } catch (NoAlertPresentException e) {
      return false;
    }
  }

  private String closeAlertAndGetItsText() {
    try {
      Alert alert = driver.switchTo().alert();
      String alertText = alert.getText();
      if (acceptNextAlert) {
        alert.accept();
      } else {
        alert.dismiss();
      }
      return alertText;
    } finally {
      acceptNextAlert = true;
    }
  }
} 

       上面這個java文件可以直接用java來運行,當然要運行的話需要導入依賴的包。對於Java開發,Eclipse可能是最方便的集成開發環境了,具體我們後面再講。
        錄製只能作爲學習手段,但不能完全代替自動化實施手段,譬如業內用得多的功能方向的QTP,性能的Loadrunner,錄製只是方便學習或者節省開發成本,腳本最後都是需要做處理才能用到產品線上。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章