Selenium学习记录1

本文介绍了Selenium的基本概念、主要版本特性,包括Selenium IDE、Selenium Grid和Selenium RC的用途。重点讲解了Selenium WebDriver的工作原理,并通过一个简单的自动化脚本演示了如何在Windows环境下配置Java环境、安装Selenium和浏览器驱动,最后执行了一个搜索百度的自动化测试案例。
摘要由CSDN通过智能技术生成

Selenium简介

Selenium 主要用于 Web 应用程序的自动化测试,但并不局限于此,它还支持所有基于 Web 的管理任务自动化。

Selenium 的特点如下:

  • 开源,免费
  • 多浏览器支持:FireFox、Chrome、IE、Opera、Edge
  • 多平台支持:Linux 、Windows、MAC
  • 多语言支持:Java、Python、Ruby、C#、JavaScript、C++
  • 支持分布式测试用例执行
  • 简单(API 简单)、灵活(用开发语言驱动)

目前Selenium经历三个正式版本。Selenium 1.0、Selenium 2.0和Selenium 3.0,Selenium 不是由单独一个工具构成的,而是由
一些插件、类库组成,每个部分都有其特点和应用场景。

Selenium1.0:1.0是由Selenium IDE、Selenium Grid、Selenium RC组成,如下图所示:
在这里插入图片描述
Selenium IDE:Selenium IDE 是嵌入到 Firefox 浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。官方给它的定位是:快速地创建 bug 重现脚本,在测试人员测试过程中,发现 bug 之后可以通过 IDE 将重现的步骤录制下来,以帮助开发人员更容易地重现 bug。IDE 录制的脚本可以转换成多种语言,从而帮助我们快速地开发脚本

Selenium Grid:Selenium Grid 是一种自动化的测试辅助工具,Grid 通过利用现有的计算机基础设施,能加快Web-App的功能测试。利用 Grid 可以很方便地实现在多台机器上和异构环境中运行测试用例。

Selenium RC:Selenium RC(Remote Control)是Selenium1.0的核心部分。Selenium RC(Remote Control)是 Selenium 家族的核心部分。Selenium RC 分为 Client Libraries 和 Selenium Server。Client Libraries 库主要用于编写测试脚本,用来控制Selenium Server 的库。Selenium Server 负责控制浏览器行为。总的来说,Selenium Server 主要包括三个部分:Launcher、Http Proxy和Core。其中,Selenium Core是被Selenium Server嵌入到浏览器页面中的。其实Selenium Core就是一堆JavaScript函数的集合,即通过这些 JavaScript 函数,我们才可以实现用程序对浏览器进行操作。Launcher 用于启动浏览器,把 Selenium Core 加载到浏览器页面当中,并把浏览器的代理设置为 Selenium Server 的 Http Proxy。
Selenium RC 的基本模块

Selenium 2.0:2.0就是加入了全新的东西WebDriver。2.0的技术方案与1.0是截然不同的,1.0 的核心是 Selenium RC,而 2.0 的核心是 WebDriver,两者是完全不同的东西。Selenium 2.0 = Selenium 1.0 + WebDriver。

在 Selenium 2.0 中主推的是 WebDriver,可以将其看作 Selenium RC 的替代品。因为 Selenium为了保持向下的兼容性,所以在 Selenium2.0 中并没有彻底地抛弃 Selenium RC。Selenium WebDriver 是典型的 Server-Client 模式,Server 端就是 Remote Server。

以下是 Selenium 2.0 工作原理的解析:
在这里插入图片描述

  1. 当使用 Selenium2.0 启动浏览器 Web Browser 时,后台会同时启动基于 WebDriver Wire 协议的 Web Service 作为 Selenium 的 Remote Server,并将其与浏览器绑定。绑定完成后,Remote Server 就开始监听 Client 端的操作请求。
  2. 执行测试时,测试用例会作为 Client 端,将需要执行的页面操作请求以 Http Request 的方式发送给 Remote Server。该 HTTP Request 的 body,是以 WebDriver Wire 协议规定的 JSON 格式来描述需要浏览器执行的具体操作。
  3. Remote Server 接收到请求后,会对请求进行解析,并将解析结果发给 WebDriver,由 WebDriver 实际执行浏览器的操作。
  4. WebDriver 可以看做是直接操作浏览器的原生组件(Native Component),所以搭建测试环境时,通常都需要先下载浏览器对应的 WebDriver。

Selenium RC 与 WebDriver 的区别:

  • Selenium RC 是在浏览器中运行 JavaScript 应用,使用浏览器内置的 JavaScript 翻译器来翻译和执行 selenese
    命令(selenese 是 Selenium 命令集合)。
  • WebDriver 是通过原生浏览器支持或者浏览器扩展来直接控制浏览器。WebDriver 针对各个浏览器而开发,取代了嵌入到被测Web应用中的JavaScript。与浏览器的紧密集成,因此支持创建更高级的测试,避免了JavaScript安全模型导致的限制。除了来自浏览器厂商的支持之外,WebDriver 还利用操作系统级的调用,模拟用户输入。

Selenium3.0:3.0的核心还是与2.0一样,在此基础上移除了Selenium RC ,因为1.0基本上已经被淘汰。同时Selenium3.0独立了Firefox驱动,之前在不同语言下的Selenium库中就包含了Firefox浏览驱动,现在3.0需要跟其它浏览器一样去单独下载驱动。

第一个自动化脚本

Windows环境准备

基本环境准备

因为是用java来写代码,所以java环境是必备,安装过程比较简单,网上有很多教程。IDE看个人喜好,这里推荐使用idea。

Selenium准备

我这里是通过Maven的方式,在POM引入了Selenium 3.0的依赖,如下所示:

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

也可以通过Selenium下载对应的Jar包,引入到项目里。

浏览器驱动安装

Selenium使用不同的浏览器需要安装对应的浏览器驱动,各浏览器驱动下载地址如下:

GeckoDriver(Firefox):https://github.com/mozilla/geckodriver/releases
ChromeDriver(Chrome):https://sites.google.com/a/chromium.org/chromedriver/home
IEDriverServer(IE):http://selenium-release.storage.googleapis.com/index.html
OperaDriver(Opera):https://github.com/operasoftware/operachromiumdriver/releases
MicrosoftWebDriver(Edge):https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver

以谷歌浏览器(最新版本)为例,进入下载页面如下:

在这里插入图片描述
文件解压后是一个chromedriver.exe,将解压后文件chromedriver.exe放到任意文件夹内,将其配置为系统环境变量

在这里插入图片描述
在这里插入图片描述
此时,我们基本已将编写Selenium自动化脚本的准备工作做完。

简单自动化demo

在Idea创建一个新的Maven项目,并如之前提到的一样,在POM中引入Selenium3.0的依赖。我们将完成一个百度搜索的自动化脚本,具体流程如下:

  1. 打开 Chrome 浏览器,输入百度的网址“www.baidu.com”
  2. 在搜索输入框中输入关键词“奥运”,接着按下回车键
  3. 验证搜索结果页面是否是“奥运_百度搜索”

因为这个流程需要用到验证功能,所以需要在POM中引入JUnit依赖,如下所示:

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

接着创建一个BaiduTest.java文件,并写下如下代码:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.junit.Assert;

public class BaiduTest {
    public static void main(String[] args) throws InterruptedException {

        //创建Chrome driver的实例
        WebDriver driver = new ChromeDriver();

        //打开百度首页"www.baidu.com"
        driver.navigate().to("http://www.baidu.com");
        //driver.get("http://www.baidu.com");
		//driver.navigate().to()实际是在调用driver.get(),两个打开url方法在Selenium3.0版本没有实质区别
		
        //通过name属性找到搜索输入框
        WebElement search_input = driver.findElement(By.name("wd"));

        //在搜索框输入搜索的关键字”奥运“
        search_input.sendKeys("奥运");

        //点击搜索按钮
        search_input.submit();

        //等待固定时间3秒
        Thread.sleep(3000);

        //验证搜索结果页面的标题
        Assert.assertEquals("奥运_百度搜索",driver.getTitle());

        driver.quit();
    }
}

代码解读:

  1. WebDriver driver = new ChromeDriver(),先创建一个 Chrome Driver 的实例,也就是打开了 Chrome 浏览器,同时后台还做了些额外的 Web Service 绑定工作。
  2. driver.navigate().to(s: “http://www.baidu.com”) 用刚才已经打开的 Chrome 浏览器访问百度主页
  3. WebElement search_input = driver.findElement(By.name(“wd”)),使用 driver 的 findElement 方法,并通过 name 属性定位到了搜索输入框,并将该搜索输入框命名为 search_input
  4. search_input.sendKeys(…charSequences:“奥运”),通过 WebElement 的 sendKeys 方法向搜索输入框 search_input 输入了字符串“奥运”;
  5. search_input.submit(),递交了搜索请求
  6. Thread.sleep(millis:3000),强行等待了固定的 3 秒时间
  7. Assert.assertEquals(expected:“奥运 _ 百度搜索”,driver.getTitle()),通过 junit 的 assertEquals 比较了浏览器的标题与预计结果,其中页面标题通过driver的getTitle方法得到,如果标题与预计结果一致,测试通过,否则测试失败
  8. driver.quit(),显式关闭了 Chrome 浏览器

结合这个简单案例可以更加深刻理解Selenium内部工作原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值