網頁

2017/12/25

在Eclipse中使用WebDriver執行Selenium test case測試 for Java

在Eclipse中使用WebDriver執行Selenium test case測試。

首先要有test case程式碼,可以透過Selenium IDE紀錄網頁操作後匯出(export)成test case,這邊使用類似的工具Katalon Recorder

測試框架是JUnit,因此匯出時選擇Java (WebDriver + JUnit),例如這邊匯出的檔案是TC001.java

TC001.java範例內容如下

package idv.matthung;

import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class TC001 {

  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();

  @Before
  public void setUp() throws Exception {
    // 將ChromeDriver的位置設設為系統參數
    System.setProperty("webdriver.chrome.driver", "D:/SeleniumServer/chromedriver_win32/chromedriver.exe"); 
    driver = new ChromeDriver();
    baseUrl = "http://localhost:8080/MY_PROJECT/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

  @Test
  public void testTC001() throws Exception {
    driver.get("http://localhost:8080/MY_PROJECT/");
    driver.findElement(By.xpath("//input[@value='登入']")).click();
    driver.findElement(By.xpath("//div[@id='nav-div']/ul/li[2]/ul/li[2]/a/span")).click();
    driver.findElement(By.id("user-group")).click();
    driver.findElement(By.id("search")).click();
    driver.findElement(By.xpath("(//img[@title='檢視/編輯'])[3]")).click();
    driver.findElement(By.xpath("(//input[@id='dscr'])[2]")).clear();
    driver.findElement(By.xpath("(//input[@id='dscr'])[2]")).sendKeys("測試敘述");
    driver.findElement(By.id("asset")).clear();
    driver.findElement(By.id("asset")).sendKeys("1000");
    driver.findElement(By.id("update")).click();

  }

  @After
  public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }
  
  private void fail(String errorString) {
    System.out.println(errorString);
  }

  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;
    }
  }

}

在Eclipse中建立一個簡單的Java專案,並將JUnit加入到build path,專案上按滑鼠右鍵 -> Build Path -> Add Libraries... -> JUnit -> 選擇JUnit版本

Selenium Client的Java函式庫加到build path。如果是maven專案則可在pom.xml加入以下

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-java</artifactId>
  <version>3.8.1</version>
</dependency>

把剛匯出的檔案複製到專案的package下,注意package是否與存放位置相符。此時可看到test case程式碼有很多錯誤,將滑鼠移到錯誤上import所需的Class即可。

因為是頁面自動化測試,所以需要依賴WebDriver來進行頁面的操作,例如這邊是使用ChromeDriver(2.34) - chromedriver_win32.zip

下載後解壓縮到你要的目錄,本篇是解壓縮至D:/SeleniumServer/chromedriver_win32/chromedriver.exe,所以在test case程式中將執行位置設為系統參數如下。

System.setProperty("webdriver.chrome.driver", "D:/SeleniumServer/chromedriver_win32/chromedriver.exe");

有了以上設定在程式中new一個WebDriver的實例時才不會出現找不到的錯誤。

接著在test case上按右鍵 -> Run As -> JUnit Test來執行測試,過程中Chrome瀏覽器會被開啟,並依照test case的步驟來執行。

步驟流程圖如下:




沒有留言:

張貼留言