0


基于web应用的UI自动化、跨浏览器测试、测试结果分析:Selenium 开源的自动化测试工具基础教程

作者:禅与计算机程序设计艺术

1.简介

Selenium是一个开源的自动化测试工具,它提供了基于web应用的UI自动化、跨浏览器测试、测试结果分析等功能。它提供的功能包括:自动化控制浏览器、操纵表单、点击链接及按钮、验证页面元素、执行JavaScript代码、生成PDF文件、模拟移动设备行为、实时日志记录、多种报告格式输出、扩展接口支持、分布式集群支持等。

Selenium WebDriver 是 Selenium 的WebDriver实现,是一个用于构建自动化测试脚本的API。它是Selenium 3.x版本的重量级产品,集成了许多强大的功能特性和便利性。它可以操纵Chrome、Firefox、IE、Edge、Safari、Android Webview、iOS UI Automation及Remote Webdriver服务器等。

本教程将会带领读者了解Selenium WebDriver的工作机制、语法规范及编程示例。通过阅读本文,你可以了解到以下知识点:
1.什么是Selenium?
2.为什么要用Selenium?
3.Selenium是如何工作的?
4.如何安装并配置Selenium环境?
5.Selenium的Java API介绍及测试框架介绍
6.编写自动化测试脚本的一般流程及基本要素
7.一些常见问题及其解决方案
8.测试案例代码示例,助您快速上手
9.一些Selenium应用场景以及未来的发展方向

2.基础概念与术语

2.1.什么是Selenium?

Selenium是一个开源的自动化测试工具,它提供了基于web应用的UI自动化、跨浏览器测试、测试结果分析等功能。它提供的功能包括:自动化控制浏览器、操纵表单、点击链接及按钮、验证页面元素、执行JavaScript代码、生成PDF文件、模拟移动设备行为、实时日志记录、多种报告格式输出、扩展接口支持、分布式集群支持等。

Selenium WebDriver 是 Selenium 的WebDriver实现,是一个用于构建自动化测试脚本的API。它是Selenium 3.x版本的重量级产品,集成了许多强大的功能特性和便利性。它可以操纵Chrome、Firefox、IE、Edge、Safari、Android Webview、iOS UI Automation及Remote Webdriver服务器等。

2.2.为什么要用Selenium?

满足自动化测试需求的场景有很多,例如:

  • 购物网站的自动化测试
  • 金融网站的自动化测试
  • 微博的自动化测试
  • 小程序的自动化测试
  • APP的自动化测试

2.3.Selenium是如何工作的?

2.3.1.运行环境准备

在进行Selenium测试之前,需要准备好如下环境:

  1. 安装Java开发环境:Windows/Linux/Mac系统均可;
  2. 安装Selenium Server或其他远程Driver:下载对应版本的selenium-server-standalone.jar,并启动。
  3. 配置Web Drivers:设置测试环境中Web浏览器的驱动文件路径,配置环境变量。

2.3.2.测试脚本编写

测试脚本通常由三部分构成:

  1. 引入必要的包
  2. 创建WebDriver对象
  3. 使用WebElement对象定位网页中的特定元素,然后对该元素进行操作。

测试脚本编写完成后,通过WebDriver调用各种命令实现对浏览器的自动化控制,从而实现对页面的测试。

2.3.3.运行测试脚本

测试脚本可以通过两种方式运行:

  1. 直接在IDE中运行测试脚本:这种方式要求有相应的调试环境,比如Eclipse、IntelliJ IDEA等;
  2. 通过命令行运行测试脚本:这种方式不需要有特定的调试环境,只需在命令行窗口中进入项目目录,并输入java -jar selenium-server-standalone.jar命令即可启动测试脚本。

2.3.4.查看测试结果

运行完测试脚本后,将生成测试报告。测试报告详细地反映测试结果,包括测试用例的执行情况、错误信息、测试时间等。根据测试报告的内容,可以判断测试是否成功,及时发现和修复出现的问题。

2.4.如何安装并配置Selenium环境

2.4.1.安装JDK

首先需要安装Java开发环境(JDK),Java Development Kit,用于运行Java程序。如果系统已经安装OpenJDK或者Oracle JDK,则无需重复安装。否则,可以到官方网站下载Java SE Development Kit 8u202 (JDK 8 Update 202)的最新版安装包安装。

2.4.2.安装Selenium Server

http://www.seleniumhq.org/download/下载对应版本的selenium-server-standalone.jar,并放入工程目录下,执行命令“java -jar selenium-server-standalone.jar”开启服务。

2.4.3.配置WebDrivers

每个浏览器都有自己的驱动程序,用来操控浏览器,不同浏览器的驱动文件放在不同的位置,因此需要分别配置。这里以FireFox浏览器为例:

  1. 下载对应的FireFoxDriver:https://github.com/mozilla/geckodriver/releases,目前最新版本是0.29.0。
  2. 将下载好的FireFoxDriver放入工程的根目录下。
  3. 配置环境变量:在系统环境变量中添加一个新的变量名为"webdriver.gecko.driver",值为刚才下载好的驱动文件的路径。
  4. 修改测试脚本中的代码,创建WebDriver对象时传入“DesiredCapabilities.firefox()”参数,即可创建一个Firefox浏览器的WebDriver对象。

2.4.4.配置IDE

根据使用的IDE不同,配置起来会有所差异。这里以Eclipse为例,介绍一下配置过程。

  1. 安装Selenium插件:打开Eclipse,依次选择Help -> Install New Software…。在弹出的对话框中,点击“Add”,输入地址“http://repository.sonatype.org/content/repositories/releases/org/seleniumhq/selenium/selenium-eclipse-plugin/3.141.59/”并回车。找到名为“Selenium IDE Tools”的插件,勾选安装,等待安装完成。
  2. 设置编码格式:打开Eclipse,依次选择Window -> Preferences -> General -> Workspace,在右侧的“Text file encoding”一项中,选择UTF-8,点击Apply和OK保存设置。
  3. 配置项目:右键单击项目名称,选择Properties。在左侧导航栏中选择“Project Facets”标签,在“Dynamic Web Module Support”面板中勾选“Web”和“JSF”,点击Apply和OK保存设置。
  4. 添加测试依赖:在pom.xml文件中加入selenium-api、junit、selenium-remote-driver依赖。
  5. 生成单元测试:在src/test/java目录下新建包,比如“demo”。然后在此包下新建一个类,比如“TestExample”,代码如下:
packagedemo;importorg.openqa.selenium.By;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.FirefoxDriver;importorg.testng.annotations.BeforeMethod;importorg.testng.annotations.Test;publicclassTestExample{privatestaticfinalStringURL="https://www.baidu.com";privateWebDriver driver;@BeforeMethodpublicvoidinit()throwsException{System.setProperty("webdriver.gecko.driver","/path/to/geckodriver");
driver =newFirefoxDriver();
driver.get(URL);}@TestpublicvoidtestSearchBaidu()throwsException{WebElement searchInput = driver.findElement(By.id("kw"));
searchInput.sendKeys("Sel<PASSWORD>");WebElement searchButton = driver.findElement(By.id("su"));
searchButton.click();}}

此处的init方法负责初始化WebDriver对象和访问页面。testSearchBaidu方法通过查找网页中id为“kw”的搜索框和id为“su”的搜索按钮,输入关键字“Selenium”,并点击搜索按钮进行搜索。
6. 运行单元测试:在Eclipse菜单栏中依次选择Run->Run As->JUnit Test。选择TestExample类,点击右下角的“Run”按钮即可运行单元测试。

2.5.Selenium的Java API介绍及测试框架介绍

2.5.1.Selenium的Java API

Selenium的Java API主要由四个部分组成:

  1. WebDriver接口:用于控制浏览器,发送命令并接收响应。
  2. WebElement接口:用于表示页面中的某个HTML元素,能够执行诸如点击、输入文本等操作。
  3. Keys类:用于帮助模拟键盘按键,如ENTER、TAB、ESC等。
  4. By类:用于帮助定位HTML元素,如ById、ByName、ByXPath等。

2.5.2.测试框架

测试框架有很多种,最常用的有两种:

  1. JUnit:一种单元测试框架,可以在单元测试时模拟用户交互、检查测试结果、生成测试报告。
  2. TestNG:另一种单元测试框架,提供了更丰富的断言功能、多线程执行、数据驱动等特性。

2.6.编写自动化测试脚本的一般流程及基本要素

下面介绍一下编写自动化测试脚本的一般流程及基本要素:

  1. 明确目标测试范围:确认测试对象、测试范围、测试内容等相关信息。
  2. 确定测试工具:选择合适的测试工具,比如Selenium IDE、Selenium WebDriver、Appium等。
  3. 安装测试环境:设置测试环境,包括安装测试工具、安装浏览器驱动、配置运行参数等。
  4. 设计测试用例:根据业务场景和测试目标设计测试用例。
  5. 编写测试脚本:按照测试工具的语法编写自动化测试脚本。
  6. 执行测试:执行测试脚本,查看测试结果,根据测试报告分析失败原因。
  7. 优化脚本:根据测试结果及时修改脚本,提升测试效率。

2.7.一些常见问题及其解决方案

2.7.1.Selenium IDE与Selenium WebDriver的区别和联系?

Selenium IDE是一款基于图形界面的测试工具,它具有较高的易用性和直观性。它可视化地构造自动化测试用例,同时提供大量的高级功能支持,方便编写者快速编写测试用例。Selenium IDE支持多种浏览器,包括Chrome、Firefox、IE、Opera等。

Selenium WebDriver是Selenium的一个WebDriver实现,它是一个用于构建自动化测试脚本的API。它是Selenium 3.x版本的重量级产品,具有较高的性能及兼容性。它可以使用各种语言实现,包括Java、Python、C#、Ruby、JavaScript等。

Selenium IDE 和 Selenium WebDriver 之间的关系是什么呢?它们之间有一个重要的区别,那就是它们在工作原理上的不同。

  1. 工作模式:Selenium IDE 和 Selenium WebDriver 分别采用不同的工作模式。

Selenium IDE 以独立的进程形式运行,它通过与浏览器的无缝连接与浏览器进行交互,它提供了大量的测试用例模板供使用者快速构造测试用例,但它不具备很强的灵活性,只能在已知的测试用例场景中使用。

Selenium WebDriver 是作为一个Selenium客户端运行在测试人员的机器上,它通过本地浏览器驱动与浏览器进行交互,它拥有独立于平台的特性,能在任意环境下运行,能适应多种浏览器,但是由于它不是独立的进程,所以测试时需要引入额外的配置及维护,且编写测试脚本相对复杂。

  1. 数据共享:Selenium IDE 和 Selenium WebDriver 可以彼此共享测试数据。

Selenium IDE 和 Selenium WebDriver 都支持生成XML格式的测试结果,并且它们还可以共享同样的数据,比如断言、预期结果等。但是在某些情况下,比如需要把预期结果持久化存储,Selenium IDE 会比 Selenium WebDriver 更合适一些。

  1. 支持平台:Selenium IDE 支持 Windows、Linux、macOS 操作系统,Selenium WebDriver 支持多种语言,包括Java、Python、C#、Ruby、JavaScript等。

2.7.2.Selenium为什么慢?

因为Selenium是通过请求和回复HTTP协议通信的,每次请求都会造成网络开销,而且Selenium做了太多的事情。具体表现为:

  1. 页面加载时间长:每次测试前都会先加载完整的页面,这导致了页面加载时间的增加。
  2. 脚本执行时间长:Selenium WebDriver 会加载被测页面的所有资源,执行所有的Javascript代码,这导致了脚本执行时间的增加。

如果你的应用是一个需要响应快的网站,那么用Selenium去测试可能会很慢,因此建议尽量减少Selenium的用法。

2.7.3.如何处理有弹窗的页面?

有弹窗的页面是指在执行测试时遇到一个弹窗框,它会阻止当前的测试继续执行,因此我们需要采取一些策略来处理这样的页面。

有三种常见的方法来处理弹窗:

  1. 等待弹窗关闭:这是最简单的方式,在测试执行过程中等待弹窗关闭。

不过这种方法可能会使得测试运行变得很慢,尤其是在存在多个弹窗的时候。

  1. 用CSS选择器处理弹窗:这种方法利用了CSS选择器,即查找具有特定样式的页面元素。我们可以将具有弹窗的元素的样式设置为display:none,然后在测试结束时恢复这个样式,就可以让弹窗消失了。

不过这种方法也不能应付所有的弹窗类型,对于异步加载的弹窗就没办法处理。

  1. JavaScript控制:这种方法利用了JavaScript来控制浏览器的行为。我们可以注入一段代码到页面中,它会监听弹窗的显示和隐藏事件,当弹窗显示出来时,它就会暂停当前的测试,等弹窗消失后再继续测试。

不过这种方法也需要测试人员掌握JavaScript的编程能力,因此它的适用场景还是有限的。

2.7.4.测试报告怎么看?

当测试结束后,你会得到一个测试报告,它包含了测试用例的执行情况、错误信息、测试时间等。如果你熟悉JUnit或TestNG的测试报告,那么理解Selenium的测试报告也就容易了。

测试报告的结构分为几个部分:

  1. Summary:概述了测试的总体情况,展示了测试的结果(Pass、Fail)、用时、总计用例数、通过的用例数、失败的用例数、错误的用例数等信息。
  2. Testsuite:展示了每条测试用例的信息,包括用例名称、用例是否通过、用例耗费的时间、用例执行步骤以及用例的错误信息。
  3. Errors and Failures:包含了所有失败或错误的用例的信息。
  4. TestCase ID:每条用例的唯一标识符。
  5. TimeStamp:测试开始的时间戳。

2.8.测试案例代码示例,助您快速上手

在接下来的部分,我将提供一些Selenium的实际例子,帮助读者快速上手。这些例子都是基于上述技术栈,以帮助读者理解Selenium的工作机制、语法规范及编程示例。

2.8.1.登录百度首页并搜索关键字

打开浏览器并访问百度首页:

WebDriver driver =newFirefoxDriver();// 或者其他浏览器
driver.get("https://www.baidu.com");

输入搜索关键字并提交:

WebElement input = driver.findElement(By.id("kw"));
input.clear();
input.sendKeys("Selenium");WebElement button = driver.findElement(By.id("su"));
button.click();

获取搜索结果列表:

List<WebElement> results = driver.findElements(By.cssSelector("#content_left div.result"));for(WebElement result : results){System.out.println(result.getText());}

2.8.2.上传图片到微博

打开浏览器并访问微博登录页面:

WebDriver driver =newFirefoxDriver();// 或者其他浏览器
driver.get("https://passport.weibo.cn/signin/login");

输入用户名密码并提交:

WebElement username = driver.findElement(By.name("username"));
username.clear();
username.sendKeys("yourUsername");WebElement password = driver.findElement(By.name("password"));
password.clear();
password.sendKeys("<PASSWORD>");WebElement submit = driver.findElement(By.xpath("//div[@class='info_list']/button"));
submit.click();

上传图片:

WebElement picButton = driver.findElement(By.cssSelector(".picBtn"));
picButton.click();File imageFile =newFile("/path/to/image.jpg");WebElement uploadField = driver.findElement(By.cssSelector(".js_upload_file"));
uploadField.sendKeys(imageFile.getAbsolutePath());WebElement confirmButton = driver.findElement(By.cssSelector(".btn_primary"));
confirmButton.click();

2.8.3.上传文件到Dropbox

打开浏览器并访问Dropbox页面:

WebDriver driver =newFirefoxDriver();// 或者其他浏览器
driver.get("https://www.dropbox.com/");

点击登录按钮并登录:

WebElement loginLink = driver.findElement(By.linkText("登录"));
loginLink.click();WebElement usernameInput = driver.findElement(By.id("login_email"));
usernameInput.sendKeys("[email protected]");WebElement continueButton = driver.findElement(By.className("secondaryAction"));
continueButton.click();WebElement passwordInput = driver.findElement(By.id("login_password"));
passwordInput.sendKeys("yourPassword");WebElement signInButton = driver.findElement(By.id("login_submit"));
signInButton.click();

上传文件:

WebElement filesLink = driver.findElement(By.linkText("文件"));
filesLink.click();WebElement dropzone = driver.findElement(By.id("file-dropzone"));
dropzone.sendKeys(newFile("/path/to/file").getAbsolutePath());

本文转载自: https://blog.csdn.net/universsky2015/article/details/131971638
版权归原作者 禅与计算机程序设计艺术 所有, 如有侵权,请联系我们删除。

“基于web应用的UI自动化、跨浏览器测试、测试结果分析:Selenium 开源的自动化测试工具基础教程”的评论:

还没有评论