Selenium 学习笔记---Selenium basic all in one

Selenium 是这些年非常流行的Web UI 自动化测试工具, 很多同学学习并使用过Selenium。但是一些问题仔细想来是不是让你觉得有些困惑,比如说Selenium 到底是什么东西,为什么能支持多语言编程,到底是怎么驱动浏览器工作的……不要着急,在这篇文章中我们会一一探讨这些问题

名词解释

Selenium 是什么,包含哪些组成部分 (蓝色字体为selenium 学习过程中经常会碰到的名词):

一般来说如果没有明确指明 Selenium 2.0 或 Web Driver而单说Selenium 的话,是指 Selenium 1.0

Selenium 1.0:

  • Selenium 1.0 起初就是一个JS库
  • 后来Selenium 1.0 引入了 Selenium RC (Selenium Remote Control).
  • 由java script 实现
  • 支持多种编程语言

Selenium RC (也称Selenium Server):

  • 全称Selenium Remote Control
  • 主要包含三个部分:Lancher, http proxy, Selenium Core

Web Driver:

一般人们如果说Web Driver, 其实是在说Selenium 2.0 又称 Selenium Web Driver。但在这里我们先说说Web Driver 本身,或者说一开始的Web Driver是什么:

  • Webdriver项目是由Simon Stewart创建的,它是一个轻便简洁的自动化测试框架
  • WebDriver 曾经是 Selenium 的竞争对手

Selenium IDE:

  • Selenium IDE 是一个Firefox 插件。安装在Firefox 浏览器中。
  • Selenium IDE 能录制真实用户在网页上的动作,并且将结果导出成脚本(多语言如 Java,javascript,ruty, python... )  

Selenium 2.0又称Selenium Web Driver

(或简称Web Driver,注意啦,现在你周围的小伙伴如果说起Web Driver,基本就是在说这个啦):

  • Selenium 2.0 = Selenium1.0 + WebDriver (也就是说Selenium 2.0合并了这两个项目)
  • 即 Selenium 2 兼容 Selenium,它既支持 Selenium API 也支持 WebDriver API

Selenium1.0

Selenium 1.0 工作步骤:

  1. 安装和启动Selenium server(Selenium RC)
  2. 测试程序调用Client API 打开浏览器
  3. Selenium Core (一堆javascript函数构成,通过调用这些函数来实现对浏览器的各种操作)注入浏览器中
  4. Selenium RC作为代理服务器发送操作命令给 Selenium Core
  5. Selenium Core 接收测试程序指令,解释成selenese 命令,在浏览器中执行
  6. Selenium GRID 可以支持并发测试

工作模型:

特性:

  • 支持多语言。但先决条件就是必须支持HTTP库
  • Selenium要求必须有真实的浏览器环境
  • 完全是由于其是由javascript实现的,所以只要是支持javascript的浏览器都可以很好的支持它
  • 不管什么浏览器都是用 JavaScript 来处理。

缺点:

  正所谓成也萧何败也萧何,正是由于以上第三几第四条特点导致了selenium 的致命缺点。

  • 为了防止恶意的javascript,所有浏览器对于执行javascript都有很严格的安全限制,以防止用户被恶意脚本攻击。这也导致了selenium在某些场景下的测试工作变得很困难,比如IE下面的upload操作就不允许执行往输入框中填写文件的路径。
  • XSS/HTTP同源数据问题(JS AJAX 不能跨域执行必须有相同的协议、端口、域名)
  • 此外还有不能处理弹出框,对话框(基本身份认证,自签名的证书和文件上传/下载)

Web Driver:

Web Driver工作步骤 (主要篇幅放在Selenium 2.0, 故这里不做详细描述):...

特性:

  • 直接驱动浏览器driver,不用启动server端
  • 可以不使用真实的浏览器环境,WebDriver可以HTML unit Driver来模拟浏览器,在内存中执行用例,更加的轻便。
  • 不单单是使用javascript,WebDriver会使用任何一种更合适的机制来操作浏览器 (通过使用C++,FireFox通过使用javascript in a XPCOM component)能很好的绕过浏览器javascript的安全限制
  • 能够调用操作系统的API,尤其是当用户需要模拟鼠标和键盘进行真是的页面操作的时候,这项能力的作用尤为明显

缺点:

  • WebDriver 不支持并行测试,而selenium Grid 可以
  • WebDriver 要求针对浏览器选择最合适的语言来编写测试

Selenium WebDriver:

Selenium 1.0 和Web Driver 各有优劣,因此我们需要一款工具,它能够把两者的优点集合起来,这就是我们下面介绍的selenium 2.0,即selenium Webdriver

Selenium WebDriver=Selenium 1.0 + WebDriver 也就是说 Selenium 2 是 Selenium 和 WebDriver 两个项目的合并,即 Selenium 2 兼容 Selenium,它既支持 Selenium API 也支持 WebDriver API。

以下引用框内部分来自Selenium 官网http://www.seleniumhq.org(笔者翻译.

特性:

  • 直接驱动浏览器driver,不用启动server端
  • 可以不使用真实的浏览器环境,WebDriver可以HTML unit Driver来模拟浏览器,在内存中执行用例,更加的轻便。
  • 支持多语言编程。
  • 能很好的绕过浏览器javascript的安全限制
  • 同时支持Selenium 1.0 和WebDriver API
  • 能够运用Selenium server 内置的selenium Guid 做并发测试
  • 能够运用selenium server 做远程测试
  • 能够调用操作系统的API,尤其是当用户需要模拟鼠标和键盘进行真是的页面操作的时候,这项能力的作用尤为明显

工作模型:

Selenium standalone server 作为一个代理服务器工作在测试脚本和目标浏览器对应的driver 之间/The standalone Selenium Server acts as a proxy between your script and the browser-specific drivers.The server may be used when running locally, but it‘s not recommend as it introduces an extra hop for each request and will slow things down

  1. WebDriver 是什么?

    WebDriver 是一款web 应用的自动化测试工具。他致力于提供便于理解和探索的有好的API,从而让你的测试变得易读且易维护。

2. WebDriver 是自动化测试框架吗?

  不是。

  WebDriver 没有绑定到任何特定的测试框架。所以它能很好地在单元测试中或普通的主函数中调用。

3. 有了WebDriver 为什么还需要其他的集成测试框架如RobotFramework 或 单元测试框架如 JUnit

WebDriver 不是测试框架,而是只提供Web 自动化测试API。这意味着WebDriver无法自行组织,执行测试脚本;又比如WebDriver 本身不提供一些测试脚本所需的API如 assert(),而JUnit 已有现成的API, 她们配合使用,就不用重复造轮子了

4. WebDriver 里还有selenium server吗,如果有什么场景下需要使用呢?

  有。

  你可以或可以不使用selenium server,这取决你想怎么使用WebDriver。如果你的浏览器和测试程序运行在同一台机器上,并且测试程序只使用 WebDriver API, 则无需使用selenium server。

  以下情况适用selenium server:

    • 你正在使用Selenium-Guid (Selenium Server 的一部分)把你的测试分布在多台物理机或虚机上

    • 你想连接到一台安装了特定版本的浏览器的远程机器上。这个浏览器的版本在本机没有安装。

    • 你没有使用Java bindings (i.e Python, C#, or Ruby) 但是想要使用HtmlUnit Driver (java 程序在内存中模拟出的无图形界面的浏览器)

5. 和Selenium 1.0 相比,WebDriver 是怎样驱动浏览器的呢?

  Selenium 1.0 是将javascrip 代码注入浏览器,通过javascrip代码来执行命令操作浏览器。

  WebDriver 通过浏览器驱动程序(如Chromedriver.exe) 直接调用浏览器的原生自动化支持。主流的浏览器对Selenium 都有大力的支持。

6. WebDriver 为什么能支持多种编程语言呢?

  Selenium 官方支持多语言的language binding(相当于用不同的语言把selenium API实现了一遍),或者称client driver,或client。只要下载对应语言的language binding,就能使用你习惯和擅长的语言编写测试程序

      Core bindings supported by the main project hosted on google code

7. WebDriver 支持的浏览器driver 有哪些。都有什么特点?(未完待续,将写会写一篇专门的博客用来比较总结不同driver之间的特性和区别)

8. 怎样创建一个selenium自动化测试工程 (以java 为例 和chromedriver 为例)

    • 下载安装Eclipse
    • 从selenium官网下载selenium java
    • 创建工程,导入jar包,如下图所示

    • 编写,调试,执行测试程序
package drivers;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class WebDriverDemo{

    public static void main(String[] args){

        //创建一个WebDriver实例
        WebDriver firefox = new FirefoxDriver();

        //访问百度
        firefox.get("http://www.baidu.com");

        //找到文本框
        WebElement text = firefox.findElement(By.name("wd"));

        //输入关键字
        text.sendKeys("Selenium");

        //提交搜索。WebDriver 会自动从表单中查找提交按钮并提交
        text.submit();

        //检查页面title
        System.out.println("Page title is" + firefox.getTitle());

        //退出driver,关闭浏览器
        firefox.quit();

    }
}

9. WebDriver 怎样进行元素定位

  http://www.51testing.com/html/87/300987-865596.html

10. 怎么将selenium 1.0 的工程迁移到selenium webdriver,怎样兼容. (将另起篇章描述)

11. WebDriver 的并行测试实现 (将另起篇章描述)

12. Selenium 和Robot Framework 集成解决方案 (Demo)

  

    

时间: 2024-08-08 14:39:06

Selenium 学习笔记---Selenium basic all in one的相关文章

【selenium学习笔记】webdriver进行页面元素定位

[selenium学习笔记]webdriver进行页面元素定位 进行Web页面自动化测试,对页面上的元素进行定位和操作是核心.而操作又是以定位为前提的,因此,对页面元素的定位是进行自动化测试的基础. 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver就是利用元素的这些属性来进行定位的. 可以用于定位的常用的元素属性: id name class name tag name link text partial link te

selenium学习笔记

Selenium-webdriver(Python)学习笔记 一.相关原理和知识 Selenium是一个关于Web的自动化测试工具,它具有免费,轻巧,支持多语言,多平台,支持分布式测试用例的执行等一系列的优点. Selenium家族大致上有四名成员,即Selenium RC,SeleniumIDE,Selenium Grid,Selenium Webdriver.笔者主要学习的Selenium Webdriver.Selenium Remote Control是一个代理服务器,它可以把各种编程语

python 学习笔记,selenium 自动化测试 更新开始

学python快两个月了,因为时间很少,经常都是每天只能看半个到一个钟的时间,有些东西看了又忘记了!所以从今天起,每天更新自己学习python 和 selenium 自动化测试的总觉,每天进步一点,好记性不如烂笔头,就从今天开始吧! -------------I Will Show You How Greate I am!

Selenium学习笔记之014:键盘的用法

主要学习知识点: 键盘按键用法 键盘组合键用法 send_keys() 输入中文运行报错问题 一.键盘按键键用法: #coding=utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys #需要引入keys包 import os,time driver = webdriver.Firefox() driver.get("http://passport.kuaibo.com/login

selenium学习笔记(下载安装)

博主自己捣鼓的接口框架先到这里 等工作上正式开始使用再后续完善需求 还是继续学习python.学编程就直接动手写 就想看看python+selenium的组合 什么都不多说.先下载安装 博主这里已经安装了pip 所以直接cmd进入python路径下的Scripts文件目录下

selenium 学习笔记 ---新手学习记录(1) 问题总结

说明:每次学习各种语言时,环境搭建访问国外网址最头疼了,现在只要是工具下载好放到自己网盘,可以随时用. 1.首先工具准备,selenium需要用到的 下载地址 访问密码 ff8f 2.我选择的语言时junit eclipse开发 junit包下载: 下载 访问密码 c23d eclipse自己百度 3.实例练习. 具体步骤百度 4.遇见的问题 等待解决的 1).如下图,如何让变量pwds每次自动加1呢?假设pwds初始值为1,我想每次自动加1,向下图所示在我运行完${pwds}+1后我打印出来结

selenium学习笔记(1) 搭建环境

1. 用Eclipse创建maven工程,在pom.xml中添加依赖 1 <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> 2 <dependency> 3 <groupId>org.seleniumhq.selenium</groupId> 4 <artifactId>selenium-java</artifactId>

selenium学习笔记(2) 测试https网站

问题: selenium启动firefox的时候,会使用一个全新的profile作为启动的profile,即手工在firefox中的设置都无法使用. 解决: 找到手动启动firefox时的profile目录,测试程序中通过FirefoxProfile传递给WebDriver 1. 查看profile目录 命令行方式,进入firefox安装目录(多为: C:\Program Files (x86)\Mozilla Firefox),执行 firefox.ext -P 或 firefox.exe -

【selenium学习笔记一】python + selenium定位页面元素的办法。

1.什么是Selenium,为什么web测试,大家都用它? Selenium设计初衷就是为web项目的验收测试再开发.内核使用的是javaScript语言编写,几乎支持所以能运行javaScript的浏览器,支持windows\linux\macos等各种平台. Selenium 脚本是用多种受支持的编程语言中的一种编写的 —— 目前可用的有 Java.Ruby 和 Python 驱动程序.这些脚本在浏览器之外的一个单独的进程中运行.驱动程序的任务是执行测试脚本,并通过与运行在浏览器中的 bro