相关的开发环境搭建参考以下文章:
Eclipse+maven+selenium自动化测试开发环境搭建
确认环境搭建成功后,在src/test/java目录下,defaut package右键新建class,命名为:GoogleTest,相关代码如下:
java
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import io.github.bonigarcia.wdm.WebDriverManager;
import java.time.Duration;
public class GoogleTest {
WebDriver driver;
@BeforeEach
void setup() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
}
@Test
void googleSearchTest() {
driver.get("https://www.google.com");
//element search
driver.findElement(By.name("q")).sendKeys("Selenium WebDriver");
driver.findElement(By.name("q")).submit();
//Explicit Wait
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.titleContains("Selenium WebDriver"));
//assert
assertTrue(driver.getTitle().contains("Selenium"));
}
@AfterEach
void tearDown() {
driver.quit();
}
}
@BeforeEach中的setup方法初始化webdriver,这两行代码必不可少,否则可能出现意想不到的错误。
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
@Test中开始真正的测试了。
driver.get("https://www.google.com"); //打开google主页
driver.findElement(By.name("q")).sendKeys("Selenium WebDriver"); //找到搜索框,并输入Selenium WebDriver
driver.findElement(By.name("q")).submit(); //相当于回车执行搜索
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); //设置显式等待,等待时间为10秒,当然3秒、5秒也可以。
wait.until(ExpectedConditions.titleContains("Selenium WebDriver")); //在10秒内等待,直到页面出现期待结果,包含Selenium WebDriver的信息。
assertTrue(driver.getTitle().contains("Selenium")); //断言设置结果为:网页title包含Selenium,测试通过。
@AfterEach中设置销毁driver,释放资源。更加严谨的逻辑是先判断driver是否还存在,如果存在执行driver.quit(); 这里不加赘述,自行研究。
void tearDown() {
driver.quit();
}
以上代码没有语法问题后,在GoogleTest.java点击右键,run as--->junit test
可以看到执行成功。到这里自动化测试算是入门了一条腿了。

到这里,我们可以发现,如果每个测试class都加上@BeforeEach,@AfterEach,并且Test中元素查找、页面等待都包含在内的话,代码显得臃肿,且维护复杂。如果将@BeforeEach @AfterEach等提取出去,并且把测试相关的页面、元素查找、用例成功的要素等单独封装到其他的类中,测试类就只关注测试步骤,这样测试就变得容易维护了。这里也就是常说的Page Obejcet Model页面对象模型。接下来会继续发布POM相关的实践过程。