Selenium-TestNG-实现-Web-自动化测试基于-Eclipse-以-Edge-浏览器为例
Selenium + TestNG 实现 Web 自动化测试(基于 Eclipse)—— 以 Edge 浏览器为例
目录
前言 :前段时间学习了软件测试技术课程,课程作业要求对某个网站进行测试,但因为自己只对单元测试与移动应用测试比较熟悉,对 Web 应用测试不甚了解,因此最近自学了一下 Web 自动化测试技术。由于找到的在线资源大多已经过时,自己在学习的过程中还是碰到了很多问题,所以在此记录一下过程。
Selenium 安装与使用
Selenium 介绍
Selenium 是一个用于 Web 应用程序测试的工具,是目前最广泛使用的开源 Web UI 自动化测试套件之一。Selenium 支持多种浏览器与编程语言,提供了大量函数对网页元素进行定位和操作。
Selenium 安装
进入 Selenium 的下载官网:https://www.selenium.dev/downloads/,在 Selenium Server (Grid) 右边点击最新版本下载即可。个人在此遇到了一个问题,就是最新版本的 Selenium 并不适合自己的 Eclipse 版本,在后续的配置中一直报类似于“NoModuleFound”的错误,因此在下方的 Previous Releases 中选择了较老的 3.14.0 版本,如下:
下载后得到一个 selenium-java-3.14.0.zip 文件,将其解压即可。
Selenium 配置
接下来在 Eclipse中 添加 Selenium 插件,方法如下:
- 右击项目(在个人的例子中,项目名为 WebTest)→ Build Path → Configure Build Path → Libraries 选项卡,进入如下界面;
- 点击 Classpath,再点击右侧的 Add External Jars,将刚才解压的 selenium-java-3.14.0 下 libs 文件夹中的 jar 文件,以及 selenium-java-3.14.0 下的 jar 文件,全部添加到 Classpath 中( 注意是根目录以及 libs 目录下所有的 jar 文件 ),完成后点击 Apply and Close 关闭。
配置成功后,可看到项目目录下出现了 Reference Libraries,可以看到 selenium-java-3.14.0 中的所有 jar 文件都在其中:
可以通过以下方式简单验证是否配置成功:新建任意 class 文件,输入代码:
import org.openqa.selenium.WebElement;
如果输入时 Eclipse 提供补全功能,并且运行能成功导入不报错,那么就配置成功了。
Selenium 使用
接下来以 Edge 浏览器为例介绍 Selenium 的使用。
浏览器驱动
首先需要下载浏览器驱动,用于 Web 测试,步骤如下:
- 点击 Edge 浏览器右上角 … → 帮助与反馈 → 关于 Microsoft Edge,查看自己的 Edge 浏览器版本号;
- 进入驱动下载网站:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/,选择对应版本的驱动下载即可,下载后解压,会得到一个 msedgedriver.exe 文件。
使用样例
下载后驱动后,就可以正式开始使用 Selenium 了。下面展示一个对百度搜索功能进行测试的样例代码,详细注释都在其中。
package webTest;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
public class Test
{
public static void main(String[] args)
{
// 定位浏览器驱动地址,第二个参数按实际的驱动地址填入
System.setProperty("webdriver.edge.driver", "E:\\Java Work\\WebTest\\msedgedriver.exe");
// 启动浏览器
WebDriver driver = new EdgeDriver();
// 转到链接
driver.get("http://www.baidu.com");
// 定位搜索框(使用 XPath)
WebElement element1 = driver.findElement(By.xpath("//_[@id=\"kw\"]"));
// 输入值
element1.sendKeys("软件测试");
// 定位提交按钮(使用 XPath)
WebElement element2= driver.findElement(By.xpath("//_[@id=\"su\"]"));
// 点击搜索
element2.click();
// 获取跳转链接后窗口标题
System.out.println(driver.getTitle());
// 暂停线程(有时需要查看程序是否正常运行,或者需要手动填写一些验证码时,可暂停线程一定时间)
try
{
Thread.sleep(3000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
// 关闭浏览器
driver.close();
}
}
这里均使用 XPath 定位网页元素。元素的 xpath 值可通过以下方式获取,如下图所示:
- 右击要定位的元素 → 检查,得到该元素对应的 HTML;
- 右击对应的 HTML 元素 → 复制 → 复制 XPath。
实际上,Selenium 提供的元素定位方式很多很多,包括 id、name 等等,提供的浏览器操作也很多,包括调整窗口大小、前进后退、刷新等等,若有需要可参考:https://blog.csdn.net/qq_22003641/article/details/79137327,这里不做介绍。
TestNG 安装与使用
TestNG 介绍
TestNG 是一个测试框架,继承自单元测试框架 Junit 。其功能更加强大,提供包括单元测试、功能测试、集成测试等功能。TestNG 提供各种方法注释,并支持多线程执行测试用例、数据驱动等功能。
TestNG 安装与配置
在 Eclipse 中按如下安装并配置 TestNG:
- 在 Eclipse 上方选择 Help → Install New Software,进入如下界面;
- 点击 Add,在 Name 中输入 TestNG,Location 中输入 ,点击 Add 后一路 Next 即可。
验证是否安装成功的方式很简单,如下图所示:
- 新建文件 → 选择 Others → TestNG → TestNG class → Next 创建。
如果能成功创建,则说明安装成功。
TestNG 使用
创建 TestNG 类后,可编写测试用例。可将之前的 Selenium 使用样例中的代码写入到 TestNG 类中,如下:
package webTest;
import static org.testng.Assert.assertEquals;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import org.testng.annotations.Test;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
public class NewTest
{
private WebDriver driver;
@BeforeClass
public void setUp()
{
// 定位浏览器驱动地址,第二个参数按实际的驱动地址填入
System.setProperty("webdriver.edge.driver", "E:\\Java Work\\WebTest\\msedgedriver.exe");
// 启动浏览器
driver = new EdgeDriver();
// 转到链接
driver.get("http://www.baidu.com");
}
@Test
public void test()
{
// 定位搜索框(使用 XPath)
WebElement element1 = driver.findElement(By.xpath("//_[@id=\"kw\"]"));
// 输入值
element1.sendKeys("软件测试");
// 定位提交按钮(使用 XPath)
WebElement element2= driver.findElement(By.xpath("//_[@id=\"su\"]"));
// 点击搜索
element2.click();
// 获取跳转链接后窗口标题
String title = driver.getTitle();
// 验证标题
assertEquals(title, "百度一下,你就知道");
}
@AfterClass
public void tearDown()
{
// 暂停线程(有时需要查看程序是否正常运行,或者需要手动填写一些验证码时,可暂停线程一定时间)
try
{
Thread.sleep(3000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
// 关闭浏览器
driver.close();
}
}
其中,由 @Test 注释的方法就是需要执行的测试用例,最后通过 assertEquals() 函数验证实际值与预期值。每个测试用例可对应一个 @Test 方法。由 @BeforeClass/@AfterClass 注释的方法则是分别是在当前测试类的第一个测试方法执行之前运行、最后一个测试方法执行之后运行的方法。
TestNG 提供的注释还有很多,具体如下(参考自:https://www.cnblogs.com/TankXiao/p/3888070.html),在新建 TestNG 类时可以勾选所需要的注释。
注释 | 描述 |
---|---|
@BeforeSuite | 注解的方法将只运行一次,运行所有测试前此套件中 |
@AfterSuite | 注解的方法将只运行一次此套件中的所有测试都运行之后 |
@BeforeClass | 注解的方法将只运行一次先行先试在当前类中的方法调用 |
@AfterClass | 注解的方法将只运行一次后已经运行在当前类中的所有测试方法 |
@BeforeTest | 注解的方法将被运行之前的任何测试方法属于内部类的 |
@AfterTest | 注解的方法将被运行后,所有的测试方法,属于内部类的 |
@BeforeGroups | 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用 |
@AfterGroups | 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用 |
BeforeMethod | 注解的方法将每个测试方法之前运行 |
@AfterMethod | 被注释的方法将被运行后,每个测试方法 |
@DataProvider | 标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个 Object [] [],其中每个对象[]的测试方法的参数列表中可以分配该 @Test 方法,希望从这个 DataProvider 的接收数据,需要使用一个 dataProvider 名称等于这个注解的名字 |
@Factory | 作为一个工厂,返回 TestNG 的测试类的对象将被用于标记的方法。该方法必须返回 Object[] |
@Listeners | 定义一个测试类的监听器 |
@Parameters | 介绍如何将参数传递给 @Test 方法 |
@Test | 标记一个类或方法作为测试的一部分 |
测试类编写完成后,右击选择 Run As → TestNG Test,即可执行测试用例。之后控制台会输出执行结果,如下图所示:
此外,TestNG 还会在项目的根目录下生成一个 test-output 文件夹,详细记录了测试报告,如下图所示,可选择 index.html 或 emailable-report.html 文件进行查看。
至此 ,基于 Eclipse 采用 Selenium + TestNG 实现 Web 自动化测试的教程已全部结束。本文仅给出一个入门级的配置与使用教学,更专业的知识还有待深入学习。
参考
- CSDN. 详解介绍 Selenium 常用 API 的使用 – Java 语言(完整版): .
- 博客园. java selenium (一) selenium 介绍: .
- 菜鸟教程. Selenium 教程: .
- 博客园. Selenium 驱动 Edge 浏览器的方法: .
- TestNG: .
- 博客园. TestNG 入门教程: .