在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的步驟來執行。
步驟流程圖如下:
沒有留言:
張貼留言