一、 简述
1. 介绍
Selenium是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。
Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、 Mozilla Firefox、Google Chrome等。这个工具的主要功能包括:测试与浏览器的兼容性,测试系统功能。支持自动录制动作和自动生成Net、Java、Perl等不同语言的测试脚本。
2. 优势
1. 更加逼真的模拟用户操作网页
2. 跨平台(Windows,Linux,mac,android,IOS) ,
3. 跨浏览器(Firefox,IE,Chrome, Opera,Safari)
4. 多语言支持(java,c#,python,ruby,php,perl,js)
5. 开源免费
6. 综上所述,selenium是可以个性定制的,可以适应不同团队的,不要钱的自动化web测试工具
3. Selenium与QTP
共同特征
1. 都可以进行Web测试
2. 都支持录制回放
3. 两者录制的脚本都有较差的兼容性,都需要有经验的开发人员进行调整。
QTP的优势
1. QTP 功能很完善,界面很强大。还对window等其他程序的支持
2. QTP录制功能强大,而Selenium IDE只是一个火狐插件,功能有限。
3. QTP有对象库,方便我们管理对象,而selenium只能进行编码维护,或者自己编写界面。
4. QTP有非常优秀的测试报告,Selenium自己没有,需要集成其他报表产品(比如结合JUnit)
5. QTP对测试人员的要求低,Selenium不会编程能做的事情有限。
Selenium的优势
1. 用户仿真:Selenium在浏览器后台执行,它通过修改HTML的DOM(文档对象模型)来执行操作,实际上是通过 javascript来控制的。执行时窗口可以最小化,可以在同一机器执行多个测试。而QTP完全模拟终端用户,独占屏幕,只能开启一个独占的实例。
2. Selenium一个机器可以跑多种脚本,但QTP独占模式必须要大量测试机器。
3. 浏览器支持。 Selenium支持IE, Firefox, Safari和Opera等,而QTP仅支持IE和Firefox。
4. Selenium2 是完全面向对象的设计 ,让开发者更加得心应手,QTP不是。
5. Selenium可以用 java,c#,python,ruby,php,perl,HTML,但是QTP只能使用VB来编写。
6. QTP只支持Windows,Selenium可以支持Windows,Linux,mac,android,IOS等。
7. Selenium的开发环境由公司决定, QTP只能在自己的IDE中使用。
8. QTP的代码提示等功能太弱,加大初学者难度。
9. 最重要的是Selenium不要钱。
4. 参考文档
帮助文档http://docs.seleniumhq.org/docs/
5. Selenium版本介绍
• Selenium 主要分为
Selenium core:为selenium的核心部分,现在已经不单独使用了;
Selenium RC(Selenium1):为上一代产品,现在已经被2代所取代;
Selenium IDE:是火狐上的录制插件;
Selenium Grid(用于并发测试) ;
Selenium WebDriver(Selenium2)
• Selenium2已经包含了一代所有代码,并实现了一些一代无法完成的功能,并具有面向对象,拓展性好等特点。
二、 下载
1. Selenium 下载
1)进入官网下载http://www.seleniumhq.org/download/
2. 其他下载
Firefox下载 http://firefox.com.cn/download/
Firebug下载:https://addons.mozilla.org/firefox/addon/1843
FirePath 下载 https://addons.mozilla.org/zh-CN/firefox/addon/firepath/
或者在火狐中下载
三、 Selenium IDE的使用
1. 界面介绍
安装好IDE后会在FF中工具选择下有Selenium IDE的选项
点击打开
打开之后出现如下界面
以上
1填写待测网站站点
2脚本的速度设置,执行暂停等
3录制 默认是进入录制状态,点击一下取消录制
4测试脚本
5测试的代码
6日志,消息等
2. 关键设置
点击options
Format
如果出现: (want the formats back?click read more,这是无法把录制的脚本转换为其他语言的。请点击options下面的options…进入如下设置界面
选择标红的选项,点击确定。
出现以下选项为设置成功
3. 使用举例
上图标明了一些Selenium IDE的主要功能。其中,由Command,Target,Value组成的表格就是脚本,每个脚本都是由一条一条的Action(行为)组成,而每个 Action又由(Command,Target,Value)三者组成。Command就是动作,Target指的是Web中的某个对象,比如:文字,输入框等等,,而Value就是这个对象的值。
当弹出上面的IDE窗口后,我们就可以开始Selenium的脚本录制了,右上角有个红色的圆点,当它下按时(如上图)就表示IDE正在进行脚本录制。 OK,开始录制,录制的时候,直接操作Firefox浏览器窗口就可以了,IDE会自动记录你的操作的,下面我演示一个例子:
上图例子中,我的操作步骤如下:
(1).在地址栏输入:http://www.baidu.com/
(2).登陆百度首页后,在查询框输入“hyddd”。
(3).按“百度一下”按钮
(4).进入搜索结果页面后,右键单击第一条记录(即:hyddd - 博客园),在右键弹出菜单中,单击“Verify TestPersent hyddd - 博客园”。
(5).单击第一条记录(即:进入hyddd - 博客园)
(6).Firefox弹出一个新Tab页面,并进入了我的博客。
OK,现在看看我们的Selenium IDE录制的结果吧:>
上图中,中间的表格就是录制的结果,你可以按“运行脚本”重新回放脚本看看,值得注意的是,在运行时,Firefox可能会认为脚本中最后一个操作(即: 步骤6)为非法弹出框,浏览器会自动阻止其弹出,这个需要设置一下Firefox,具体位置 是:Firefox->Menubar->Tools->options->content->Block pop-up Window,你可以把钩去掉或者在Exceptions里面添加相应的网址。
恩,到此为止,脚本录制圆满完成:>
在运行脚本后,你会发现IDE表格的颜色发生了变化,运行前,脚本表格为白色,成功运行完毕后,表格为青色,其中还分为深青色和浅青色两种,浅青色表示: 动作成功,如:打开网页成功,点击按钮成功等等,而深青色表示:判断正确,如:“hyddd - 博客园”这段文字在页面中存在等等。 看完正确,现在我们看看出错时的情况吧。
出错时,表格可能会出现两种颜色,一种是浅粉红色,一种是深粉红色。浅粉红色表示判断结果为false,这种情况案例还是会继续执行下去,判断的失败不会影响案例的运行,深粉红色表示动作失败,如:没有找到按钮等(如上图),这种情况下案例会停止运行。
4. 代码转换
点击以下可以转化为对应语言的版本
选择 c#、NUint?WebDriver
警告转换为c#之后就不能再IDE中执行了
点击确定 为以下c#代码
可以复制一下代码粘贴到vs中进行运行
1. 建立selenium测试项目
2. 编码
1创建一个项目,这儿我以控制台程序为例
2 下载selenium c#包 [selenium-dotnet-2.32.0.zip]并解压
3增加引用
我是用的donet4.0所以选择4.0的。
全选所有DLL文件,点击OK
项目引用会有如下文件
复制IDE中代码 修改之后就可以跑起来第一个selenium脚本了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenQA.Selenium;
using NUnit.Framework;
using OpenQA.Selenium.Firefox;
namespace ConsoleApplication1
{
[TestFixture]
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.SetupTest();
p.TheUntitledTest();
p.TeardownTest();
}
private IWebDriver driver;
private StringBuilder verificationErrors;
private string baseURL;
private bool acceptNextAlert = true;
[SetUp]
public void SetupTest()
{
driver = new FirefoxDriver();
baseURL = "http://www.baidu.com/";
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
try
{
driver.Quit();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
[Test]
public void TheUntitledTest()
{
driver.Navigate().GoToUrl(baseURL + "/");
driver.FindElement(By.Id("kw")).Clear();
driver.FindElement(By.Id("kw")).SendKeys("selenium");
driver.FindElement(By.Id("su")).Click();
driver.FindElement(By.Id("kw")).Clear();
driver.FindElement(By.Id("kw")).SendKeys("selenium ide的Ì?使º1用®?");
driver.FindElement(By.Id("su")).Click();
}
private bool IsElementPresent(By by)
{
try
{
driver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
private bool IsAlertPresent()
{
try
{
driver.SwitchTo().Alert();
return true;
}
catch (NoAlertPresentException)
{
return false;
}
}
private string CloseAlertAndGetItsText()
{
try
{
IAlert alert = driver.SwitchTo().Alert();
string alertText = alert.Text;
if (acceptNextAlert)
{
alert.Accept();
}
else
{
alert.Dismiss();
}
return alertText;
}
finally
{
acceptNextAlert = true;
}
}
}
}