﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-jojo's blog－－快乐忧伤都与你同在-文章分类-测试相关</title><link>http://www.blogjava.net/ruoyoux/category/40787.html</link><description>为梦想而来，为自由而生。
性情若水，风起水兴，风息水止，故时而激荡，时又清平……</description><language>zh-cn</language><lastBuildDate>Tue, 14 Jul 2009 08:48:46 GMT</lastBuildDate><pubDate>Tue, 14 Jul 2009 08:48:46 GMT</pubDate><ttl>60</ttl><item><title>每日一记 2009/07/14 Selenium 学习录</title><link>http://www.blogjava.net/ruoyoux/articles/286677.html</link><dc:creator>Blog of JoJo</dc:creator><author>Blog of JoJo</author><pubDate>Tue, 14 Jul 2009 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/ruoyoux/articles/286677.html</guid><wfw:comment>http://www.blogjava.net/ruoyoux/comments/286677.html</wfw:comment><comments>http://www.blogjava.net/ruoyoux/articles/286677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ruoyoux/comments/commentRss/286677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ruoyoux/services/trackbacks/286677.html</trackback:ping><description><![CDATA[<strong>Part One --- Selenium IDE</strong><br />
<br />
<br />
&nbsp;&nbsp;&nbsp; Selenium IDE 是<a href="javascript:;" onclick="javascript:tagshow(event, 'selenium');" target="_self"><u><strong>selenium</strong></u></a><a href="javascript:;" onclick="javascript:tagshow(event, '%B2%E2%CA%D4');" target="_self"><u><strong>测试</strong></u></a>工具中的其中一个,是一个基于FireFox的<a href="javascript:;" onclick="javascript:tagshow(event, 'Web%B2%E2%CA%D4');" target="_self"><u><strong>Web测试</strong></u></a>开发环境，可以录制、编辑和调试测试。Selenium IDE包含了Selenium Core，因此可以轻易地在浏览器中录制和回放测试。
<div>　　Selenium IDE不仅仅是一个测试录制工具，而是一个IDE，可以录制测试，也可以手工编辑测试，可设置断点进行调试，可把测试保存到HTML、<a href="javascript:;" onclick="javascript:tagshow(event, 'Ruby');" target="_self"><u><strong>Ruby</strong></u></a>、C#、<a href="javascript:;" onclick="javascript:tagshow(event, 'Java');" target="_self"><u><strong>Java</strong></u></a>等<a href="javascript:;" onclick="javascript:tagshow(event, '%C6%E4%CB%FB');" target="_self"><u><strong>其他</strong></u></a>脚本格式，然后使用Selenium RC来实现并运行更加灵活和强大的测试。</div>
<div>&nbsp;&nbsp;
Selenium
IDE是一个firfox插件,录制相当方便,而且效果不错,很多录制后不需要修改即可回放.编辑也相当简单,一行就是一个完整的命令.十分适合于编程基
础较薄的测试人员使用.但是由于所用的语言是selenese即是类html脚本语言而非程式语言,于组织脚本不够灵活,所形成的功能不如
selenium RC 强大,而且对脚本组织也不方便.更重要的是暂时只支持 firefox浏览器.所以一般情况下是以selenium IDE
来熟悉 selenium功具.然后利用IDE 来录制脚本作为selenium
core的脚本文件或更多的是用IDE录制而保存为drive脚本即是程式语言脚本如java 脚本.但无论如何 selenium
IDE是学习selenium的必修课,因为日后录制脚本需要它,即使用selenium
rc也可用它录制部分脚本并可方便用于调试.下面将简单介绍Selenium IDE的整个使用过程.</div>
<div>&nbsp;&nbsp; &nbsp;1&gt;
Selenium IDE 安装. 从其官方网站下载安装:http://selenium-ide.openqa.org/,跟普通frifox
插件安装没有什么两样(注意是firefox安装插件不是IE哦..).安装完成后,在浏览器"工具"菜单栏即可见Selenium IDE 工具.</div>
<div>&nbsp;&nbsp;
&nbsp;2&gt;Selenium
IDE录制脚本.安装完成后当然是开始录制脚本了.打开IDE工具后,类似一个小浏览器(此时默认是录制状态),在Base URL
中输入你要录制的网站网址如www.google.com.然后在Firefox 中打开google 网站,输入"Selenium
ide",再点击搜索.然后点击IDE工具的停止录制按钮停止录制.此时你会发现在"Table"中有了一些命令行,每一有三个部分组成.
&nbsp;　command:命令如单击click, Target:目标即是命令的对象如单击按钮(用xpath或是<a href="javascript:;" onclick="javascript:tagshow(event, '%C6%E4%CB%FC');" target="_self"><u><strong>其它</strong></u></a>定位方法表示),Value即是值如向输入框输入东西即在这里设置.而在"Sourse"中可看到类似html 的脚本,保存后就这样了,呵呵.</div>
<div>&nbsp;&nbsp;
&nbsp;3&gt; Selenium
IDE编辑脚本.你可以在Table中修改,点击相应命令行,所在行内部便会出现在下方,即可方便修改,如选择相应的command.当然你也可以在
Sourece中修改,但人必须对 Selenium命令很熟悉. 现在修改下刚才录制的脚本,将第二行命令的value 修改为Selenium.</div>
<div>&nbsp;&nbsp; &nbsp;4&gt;Selenium IDE脚本运行. 修改完后即可点击运行按钮运行.运行刚才修改过的脚本,你会发现其迅速打开google浏览器并输入"Selenium"并点击进行搜索.此时运行结束.</div>
<div>&nbsp;&nbsp; &nbsp;5&gt;Selenium IDE脚本保存.保存时可保存为html脚本或是其它程式语言脚本,初步<a href="javascript:;" onclick="javascript:tagshow(event, '%D1%A7%CF%B0');" target="_self"><u><strong>学习</strong></u></a>还是保存为html脚本吧.</div>
<div>&nbsp;&nbsp; &nbsp;6&gt;打开 seleniumIDE脚本并运行.这个就非常简单了....</div>
<div>&nbsp;&nbsp;
&nbsp;到此,Selenium IDE录制并修改运行整个过程完成了,你已经可以轻松方便使用selenium
IDE进行录制运行脚本了.但是要运用到测试中去尚需要时间熟悉,如都有什么命令啊,如何进行定位啊,如何用assert来验证验证点啊，这也是
selenium 测试主要学习的三点．如果这三占都搞明白了,熟悉了,恭喜你,你已经可以用selenium进行测试了．</div>
<div>&nbsp;&nbsp;
&nbsp;作为使用selenium IDE 工具并不复杂,而在于如何更熟悉它并用于测试中去.况且如前面提到只用Selenium IDE
进行测试局限性太高,所以建议借学习selenium IDE 了解并熟悉selenium工具,然后用其录制脚本并用 selenium
其它工具进行测试如selenium Core, selenium RC,selenium
Grid.于本人使用经验而言,建议使用selenium
RC.当然并不是说其它不好,其它有自己的优势或是功能也是RC不具备的.从学习与使用方面考虑是先学习 selenium IDE,
然后转向Selenium RC. 所以接下来将介绍Selenium RC.<br />
<br />
<br />
<br />
<br />
<br />
<strong>Part Two --- Selenium Introduction</strong> 1<br />
<br />
<div>
<p>其实几天前就看了一下Selenium，不过因为之前写别的东西，就拖到了今天。
Selenium包括三部分，Selenium core，Selenium IDE和Selenium RC。Selenium
core自然就是他的核心代码，Selenium
IDE是用JavaScript写成的Firefox插件，可以录制脚本，转换成其他语言，并且回放等。但是喵喵在这里主要想说的是Selenium
RC，即Selenium Remote Control，以及它和ant的集成使用。</p>
<p>Selenium Remote Control现在最新的是0.9.2，可以在<a href="http://www.openqa.org/selenium-rc/" title="http://www.openqa.org/selenium-rc/"><font color="#4389cf">http://www.openqa.org/selenium-rc/</font></a>下
载。Selenium Remote Control可以允许你使用编程语言（Java, .NET, Perl, Python, and
Ruby）实现自动化web应用UI的测试，它提供了一个Selenium
Server，它可以自动的start/stop/control所有支持的浏览器（Windows平台上为Internet Explorer
6.0 and 7.0, Firefox 1.5.0.8 and 2.0, Opera 8.5.4 and 9.0.2）。</p>
<p>Selenium Server必须跑在JRE1.5以上版本，可以通过java -version查看当前的JRE版本。</p>
<p>启动Selenium Server：java -jar selenium-server.jar</p>
<p>可以通过-interactive参数使之以interactive mode启动，当然，在此喵喵不采用这种方式，而是用java编写testcase来进行测试。</p>
<p>代码如下：</p>
<p>import com.thoughtworks.selenium.*;<br />
import junit.framework.*;<br />
public class GoogleTest extends TestCase {<br />
&nbsp;&nbsp;&nbsp; private Selenium browser;<br />
&nbsp;&nbsp;&nbsp; public void setUp() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; browser = new DefaultSelenium("localhost",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4444, "*firefox", <a href="http://www.google.com/"><font color="#4389cf">http://www.google.com</font></a>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; browser.start();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void testGoogle() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; browser.open(<a href="http://www.google.com/webhp?hl=en"><font color="#4389cf">http://www.google.com/webhp?hl=en</font></a>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; browser.type("q", "hello world");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; browser.click("btnG");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; browser.waitForPageToLoad("5000");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assertEquals("hello world - Google Search", browser.getTitle());<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void tearDown() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; browser.stop();<br />
&nbsp;&nbsp;&nbsp; }<br />
} </p>
<p>启
动Selenium
Server以后，就可以运行上面的testcase了。相信大家也都看到了，这个testcase是继承了junit的testcase。所以下面要讲
的用ant进行自动化的编译和测试就和前面的ant学习笔记（一）中提到的&lt;junit&gt;task完全一样了。</p>
<p>ant脚本片段如下：</p>
<p>&lt;!--&nbsp; 编译selenium test文件 --&gt;<br />
&lt;target name="compileselenium"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;mkdir dir="${dist.selenium}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;javac destdir="${dist.selenium}" deprecation="on"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;src path="${src.selenium}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath refid="classpath"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath refid="proj.libs"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/javac&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;/target&gt;<br />
&lt;!--&nbsp; 运行selenium&nbsp; --&gt;<br />
&lt;target name="selenium" depends="compileselenium"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;junit printsummary="yes" haltonfailure="yes"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;path refid="classpath"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pathelement location="${dist.selenium}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/classpath&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;formatter type="plain"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;test name="GoogleTest" haltonfailure="no" outfile="result"/ &gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/junit&gt;<br />
&lt;/target&gt;</p>
</div>
<br />
<br />
<strong>Part Three -- Selenium学习笔记</strong><br />
<br />
最近准备用Selenium自动化录制测试脚本，稍微总结一下。<br />
Selenium的主页是<a href="http://seleniumhq.org/" target="_blank"><font color="#2970a6">http://seleniumhq.org</font></a><br />
Selenium包括很多组件，其中我现在用的是Selenium RC和Selenium IDE。Selenium IDE是Firefox的一个插件，我们可以使用它录制页面操作。<br />
Selenium
IDE安装完毕之后，可以从工具菜单中激活，然后我们就可以在firefox中访问需要测试的网页，进行各种页面操作，Selenium
IDE在这个过程中会记录我们的页面控件和动作。完成录制之后，Selenium IDE生成一个HTML文件保存脚本，比如<br />
<br />
<div>
<div>
<div><a href="http://www.itpub.net/viewthread.php?tid=1153458###" class="smalltxt" onclick="copycode($('code0'));">[Copy to clipboard]</a> <a href="http://www.itpub.net/viewthread.php?tid=1153458###" onclick="toggle_collapse('code0');">[ <span id="code0_symbol">-</span> ]</a></div>
CODE:</div>
<div id="code0">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;<br />
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;<br />
&lt;head profile="http://selenium-ide.openqa.org/profiles/test-case"&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br />
&lt;link rel="selenium.base" href="http://www.baidu.com/" /&gt;<br />
&lt;title&gt;baidu&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table cellpadding="1" cellspacing="1" border="1"&gt;<br />
&lt;thead&gt;<br />
&lt;tr&gt;&lt;td rowspan="1" colspan="3"&gt;baidu&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/thead&gt;&lt;tbody&gt;<br />
&lt;tr&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;td&gt;open&lt;/td&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;td&gt;/&lt;/td&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;td&gt;type&lt;/td&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;td&gt;kw&lt;/td&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;td&gt;ckword&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;td&gt;clickAndWait&lt;/td&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;td&gt;sb&lt;/td&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/tbody&gt;&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</div>
</div>
<br />
我们可以导出成Java文件，比如：<br />
<br />
<div>
<div>
<div><a href="http://www.itpub.net/viewthread.php?tid=1153458###" class="smalltxt" onclick="copycode($('code1'));">[Copy to clipboard]</a> <a href="http://www.itpub.net/viewthread.php?tid=1153458###" onclick="toggle_collapse('code1');">[ <span id="code1_symbol">-</span> ]</a></div>
CODE:</div>
<div id="code1">package com.example.tests;<br />
<br />
import com.thoughtworks.selenium.*;<br />
import java.util.regex.Pattern;<br />
<br />
public class NewTest extends SeleneseTestCase {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;public void setUp() throws Exception {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; setUp("http://www.baidu.com/", "*chrome");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;public void testNew() throws Exception {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; selenium.open("/");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; selenium.type("kw", "ckword");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; selenium.click("sb");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; selenium.waitForPageToLoad("30000");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br />
}</div>
</div>
<br />
只要导入相应的selenium和Junit包就可运行。<br />
有一点需要注意的是在回放脚本时，应该添加setSpeed方法，参数是ms，因为Selenium
IDE虽然可以选择回放速度（慢——中——快），但实际上即使选择慢速，Selenium
IDE仍然运行的有些快，导致其在顺序执行用户操作时，可以发生没等到页面加载完毕就执行下一个命令的现象，导致下一个命令找不到响应的页面控件。除了
setSpeed之外，Selenium IDE还可以添加大量的命令。具体见Selenium IDE界面。<br />
另外一个关键是如何识别页面控件。自动化的核心是录制的控件识别方法可以复用，Selenium
IDE支持的识别格式包括ID、Name、XPath:attributes、DOM index和XPath :
position，而且允许正则表达式，所以非常灵活，根据我使用的情况来看，对于富客户端应用，控件ID通常都增加了一个随机数，不适合做识
别，Name还不错，但是如何这个控件Name带有版本信息，比如控件在不断升级，从1.3升到1.4，那么Name可以会失效，要小心。XPath:
position我用的最多，也觉得定位最准。但是Selenium
IDE有时抓不到某些操作，比如，可以某一个Logout链接，是由span来实现的，此时Selenium
IDE抓不到，此时可以XPath:attributes识别，这样写：//span[text()='Log out']，搞定。<br />
对于Selenium IDE，还有很多细节需要学习，比如正则表达式的应用，如何写出通用的识别方法，等等。我准备使用Selenium IDE录制脚本，然后导出成java文件，做一些修改之后用Selenium RC驱动。<br />
<br />
原文 <a href="http://www.ckword.com/blog/?p=36" target="_blank">http://www.ckword.com/blog/?p=36</a><br />
<br />
<p><font color="#000000" size="3"><strong>Part Four --- About Selenium</strong></font></p>
<p><strong>优势：</strong></p>
<p>1. 记录<a href="javascript:;" onclick="javascript:tagshow(event, '%B2%E2%CA%D4');" target="_self"><u><strong>测试</strong></u></a>过程中，所见 即是所得，selenium 的所有内部程序都是用Javascipt编写的。</p>
<p>[Javascrīpt: 由Netscape Communications 和Sun Micorsystems公司共同开发的一种描述<a href="javascript:;" onclick="javascript:tagshow(event, '%D3%EF%D1%D4');" target="_self"><u><strong>语言</strong></u></a>，与Java 的关系比较松散。Javascrīpt 能为Web页添加基本的联机应用程序和功能，但它不是一种真正的面向对象语言。</p>
<p>它的工作特点是，当client端发出一个JS的请求时，它不必从web server下载，而直接由浏览器做出响应。]</p>
<p>2. 支持多种操作系统，如windows, Mac, <a href="javascript:;" onclick="javascript:tagshow(event, 'Linux');" target="_self"><u><strong>Linux</strong></u></a>，也支持多种浏览器，如IE,Firefox, Mozilla.</p>
<p>若使用Selenium IDE进行web 自动记录<a href="javascript:;" onclick="javascript:tagshow(event, '%B2%E2%CA%D4%D3%C3%C0%FD');" target="_self"><u><strong>测试用例</strong></u></a>录制，只能是在Firefox （笔者还没试过Mozilla,嘿嘿）是先录制好<a href="javascript:;" onclick="javascript:tagshow(event, '%BD%C5%B1%BE');" target="_self"><u><strong>脚本</strong></u></a>，再在其它浏览器执行测试用例，进行测试。</p>
<p>3.
执行两种开发脚本，test runner,需要安装Selenium
Core,执行的文件为.HTML后缀名。另一种是driven(脚本语言编写)，支持多种语言：JAVA,.NET, Perl, Python,
Ruby.(在下用的是ruby, 没办法，谁叫它既简洁又明了呢！^ ^)</p>
<p><strong>劣势：</strong></p>
<p>较难处理逻辑关系强的业务测试。</p>
<p><font size="3"><strong>Selenium 实质：</strong></font></p>
<p>&nbsp; 通过HTTP协议，发送请求来完成测试用例的。</p>
<p><font size="3"><strong>Selenium <a href="javascript:;" onclick="javascript:tagshow(event, '%C3%FC%C1%EE');" target="_self"><u><strong>命令</strong></u></a>：</strong></font>只有两种</p>
<p>1. 操作(action)：用于模拟用户与web的交互。</p>
<p>2. 断言（assertion）:验证一个命令的预期结果。（类似于watir^ ^）</p>
<p><font size="3"><strong>Selenium 的组成：</strong></font></p>
<p><strong>Selenium IDE：</strong>firefox 的 plug-in。 是浏览器的工具，不能安装在IE上。</p>
<p><strong>Selenium Core:</strong>纯粹由Javascrīpt组成的，有assertion机制的test suit runnner.</p>
<p><strong>Selenium Remote Control:</strong></p>
<p>一个代理与控制端， 可代替Selenium core 和IDE 的client端。</p>
<p>下载地址：<a href="http://www.openqa.org/">http://www.openqa.org/</a></p>
<p><font size="3"><strong>一个使用Selenium IDE的测试例子脚本：</strong></font></p>
<p>class NewTest<br />
&nbsp; def test_foo<br />
&nbsp;&nbsp;&nbsp; open "/intl/zh-CN/"<br />
&nbsp;&nbsp;&nbsp; assertTitle "Google"<br />
&nbsp;&nbsp;&nbsp; type "q", "selenium"<br />
&nbsp;&nbsp;&nbsp; clickAndWait "btnG"<br />
&nbsp;&nbsp;&nbsp; assertTitle "selenium - Google 搜索"<br />
&nbsp;&nbsp;&nbsp; clickAndWait "link=高级搜索"<br />
&nbsp;&nbsp;&nbsp; assertTitle "Google 高级搜索"<br />
&nbsp;&nbsp;&nbsp; type "as_epq", "iccer"<br />
&nbsp;&nbsp;&nbsp; select "lr", "label=简体中文"<br />
&nbsp;&nbsp;&nbsp; clickAndWait "btnG"<br />
&nbsp;&nbsp;&nbsp; assertTitle "selenium "iccer" - Google 搜索"<br />
&nbsp;&nbsp;&nbsp; click "link=测试| 软件测试| 软件缺陷跟踪| 软件配置工具| 测试用例设计| Web测试 ..."<br />
&nbsp; end<br />
end</p>
<p>将脚本拷下，存为.HTML文档，再在firefox的selenium IDE工作中打开，执行就OK了。（执行不了就多试几次吧。^ ^）</p>
<p>迟点要添加用selenium core的例子。</p>
<p><br />
</p>
<h2><a id="ctl04_TitleUrl" href="http://www.cnblogs.com/hyddd/archive/2009/05/24/1488377.html">Part Five -- Selenium RC测试案例</a>
</h2>
<p><span style="font-size: medium;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 《<a href="http://www.cnblogs.com/hyddd/archive/2009/05/20/1473146.html">Selenium简介</a>》
中讲过，Selenium
RC支持多种语言编写测试案例，如：C#，Python。在工作中，我倾向于是用Python这类动态语言编写测试案例，因为这样的测试案例无需编
译:&gt;，试想如果你有1000个测试案例，每个都要编译，那会给编译服务器很大的压力，而且案例修改后，还得重新编译才能运行:&lt;。但在本系
列的文章中，我还是打算使用C#编写示范例子。</span></span></p>
<p><span style="font-size: medium;"><span style="font-family: 宋体;">Selenium RC下载：<a href="http://seleniumhq.org/download/" title="http://seleniumhq.org/download/">http://seleniumhq.org/download/</a></span></span></p>
<p><span style="font-size: medium;"><span style="font-family: 宋体;"><img src="http://pic002.cnblogs.com/img/hyddd/200905/2009052419031197.jpg" alt="" /></span></span></p>
<p><span style="font-size: medium;"><span style="font-family: 宋体;"><span style="font-size: large;"><strong>写Selenium RC的测试案例</strong></span></span></span></p>
<p><span style="font-size: medium;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp;&nbsp; 上一篇《<a href="http://www.cnblogs.com/hyddd/archive/2009/05/24/1487967.html">Selenium IDE的使用</a>》中，提到了Selenium IDE可以把录制的脚本转为其他语言的脚本，所以我继续用上一篇的脚本为例子，下面是把脚本语言转换为C#后的代码：</span></span></p>
<div><span style="font-size: medium;"><span style="font-family: 宋体;"><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;System;<br />
</span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;System.Text;<br />
</span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;System.Text.RegularExpressions;<br />
</span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;System.Threading;<br />
</span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;NUnit.Framework;<br />
</span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;Selenium;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">namespace</span><span style="color: rgb(0, 0, 0);">&nbsp;SeleniumTests<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;[TestFixture]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span>&nbsp;<span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;NewTest<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;ISelenium&nbsp;selenium;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;StringBuilder&nbsp;verificationErrors;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[SetUp]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span>&nbsp;<span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;SetupTest()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span>&nbsp;<span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;DefaultSelenium(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">localhost</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 128);">4444</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">*chrome</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">http://change-this-to-the-site-you-are-testing/</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verificationErrors&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span>&nbsp;<span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;StringBuilder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[TearDown]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span>&nbsp;<span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;TeardownTest()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Stop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">&nbsp;(Exception)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;Ignore&nbsp;errors&nbsp;if&nbsp;unable&nbsp;to&nbsp;close&nbsp;the&nbsp;browser</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.AreEqual(</span><span style="color: rgb(128, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">,&nbsp;verificationErrors.ToString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Test]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span>&nbsp;<span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;TheNewTest()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Open(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Type(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">kw</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">hyddd</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Click(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">sb</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.WaitForPageToLoad(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">30000</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.IsTrue(selenium.IsTextPresent(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">hyddd&nbsp;-&nbsp;博客园</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">&nbsp;(AssertionException&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verificationErrors.Append(e.Message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Click(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">//table[@id='1']/tbody/tr/td/a/font</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></span></span></div>
<p><span style="font-size: medium;"><span style="font-family: 宋体;">在这里，转换后的脚本使用了NUnit测试框架，为了简化，我用VS的Test Project代替（当然你也可以用Console Application建立测试工程的），步骤如下：<br />
<strong>1.建立Test Project</strong><br />
</span></span></p>
<p><span style="font-size: medium;"><span style="font-family: 宋体;"><img src="http://pic002.cnblogs.com/img/hyddd/200905/2009052419043083.jpg" alt="" /></span></span></p>
<p><span style="font-size: medium;"><strong><span style="font-family: 宋体;">2.导入DLL引用</span></strong></span></p>
<p><span style="font-size: medium;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 把selenium-dotnet-client-driver-1.0-beta-2目录中的<span style="color: rgb(0, 0, 255);">ThoughtWorks.Selenium.Core.dll</span>，<span style="color: rgb(0, 0, 255);">ThoughtWorks.Selenium.IntegrationTests.dll</span>，<span style="color: rgb(0, 0, 255);">ThoughtWorks.Selenium.UnitTests.dll</span>加入项目：</span></span></p>
<p><span style="font-size: medium;"><span style="font-family: 宋体;"><img src="http://pic002.cnblogs.com/img/hyddd/200905/2009052419061081.jpg" alt="" /></span></span></p>
<p><strong><span style="font-size: medium;"><span style="font-family: 宋体;">3.把上面自动生成的代码再改一下</span></span></strong></p>
<div><span style="font-size: medium;"><span style="font-family: 宋体;"><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;System;<br />
</span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;System.Text;<br />
</span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;System.Collections.Generic;<br />
</span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;Microsoft.VisualStudio.TestTools.UnitTesting;<br />
</span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;Selenium;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">namespace</span><span style="color: rgb(0, 0, 0);">&nbsp;SeleniumTest<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;[TestClass]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span>&nbsp;<span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;UnitTest1<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[TestMethod]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span>&nbsp;<span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;Test()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">127.0.0.1为Selenium测试服务器位置。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">4444为Selenium测试服务器监听端口。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">*iexplore为启动浏览器类型，我把它改为了IE浏览器。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0); text-decoration: underline;">http://www.baidu.com为源地址</span><span style="color: rgb(0, 128, 0);">。</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISelenium&nbsp;selenium&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span>&nbsp;<span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;DefaultSelenium(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">127.0.0.1</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 128);">4444</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">*iexplore</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">http://www.baidu.com</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Open(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Type(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">kw</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">hyddd</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Click(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">sb</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.WaitForPageToLoad(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">30000</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.IsTrue(selenium.IsTextPresent(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">hyddd&nbsp;-&nbsp;博客园</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Click(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">//table[@id='1']/tbody/tr/td/a/font</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
</span></span></span><span style="font-size: medium;"><span style="font-family: 宋体;"><span style="color: rgb(0, 0, 0);">selenium.Close();</span></span></span><br />
<span style="font-size: medium;"><span style="font-family: 宋体;"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.Stop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></span></span></div>
<p><span style="font-size: medium;"><span style="font-family: 宋体;"><strong>4.启动Selenium测试服务器</strong><br />
&nbsp;&nbsp;&nbsp; 打开cmd进入selenium-server-1.0-beta-2目录，输入&#8220;java -jar selenium-server.jar&#8221;</span></span><span style="font-size: medium;"><span style="font-family: 宋体;">(需要先安装JRE)</span></span><span style="font-size: medium;"><span style="font-family: 宋体;">，启动Selenium测试服务器。<br />
<img src="http://pic002.cnblogs.com/img/hyddd/200905/2009052419082473.jpg" alt="" /></span></span></p>
<p><span style="font-size: medium;"><span style="font-family: 宋体;"><strong>5.运行测试案例</strong><br />
(1).运行测试案例：<br />
<img src="http://pic002.cnblogs.com/img/hyddd/200905/2009052419090425.jpg" alt="" /></span></span></p>
<p><span style="font-size: medium;"><span style="font-family: 宋体;">(2).测试结果：</span></span></p>
<p><span style="font-size: medium;"><span style="font-family: 宋体;"><img src="http://pic002.cnblogs.com/img/hyddd/200905/2009052419093965.jpg" alt="" /><br />
恩，案例Pass了，如果案例失败的话，Error Meesage会说明失败的原因。<br />
(注
意:和Firefox一样，IE下也有屏蔽弹出网页功能，修改设置方法：MenuBar-&gt;Tools-&gt;Popup
Blocker-&gt;Turn off Popup Blocker，或者在Popup Blocker Settings里面配置。)</span></span></p>
<p><br />
</p>
<strong>Part Six -- 配置 selenium rc for HTTPS 测试</strong><br />
<br />
1。选择工具<br />
selenium有好几种，首先需要确定的是哪种工具适合<br />
<br />
* selenium IDE: 是一个firefox的plug-in，这个基本上对任何<a href="http://hi.baidu.com/wsh0102/blog/item/%20:;" target="_self"><u><strong>测试</strong></u></a>都有用，主要是因为可以省下大量的手写测试的时间。根据我的经验，最新的版本(1.0 beta)在RHEL 5.0上不能用，所以我用的是0.87版本。<br />
在这里下载：http://selenium-ide.openqa.org/download.jsp不过它只能在firefox上用<br />
<br />
* selenium rc : 这个是用来遥控的。(rc = remote controller)如果你需要在一台电脑上控制<a href="http://hi.baidu.com/wsh0102/blog/item/%20:;" target="_self"><u><strong>其它</strong></u></a>几台电脑进行测试，我用的就是这个。不过我用它的主要原因是它支持比较多的脚本语言（perl，python。。。）写自动测试程序比较容易<br />
<br />
* selenium core : 只能支持Selenese语言（a simple scrīpting language. Selenese
has a number of strict limitations: it has no conditionals (no "if"
statements), and it has no loops (no "for" statements). This can make
writing complicated tests difficult or even
impossible.）如果需要知道比较具体的区别的话，还是看它们自己的文件：http://wiki.openqa.org/pages
/viewpage.action?pageId=7632<br />
<br />
2。配置<br />
配置有很多步骤和方面，首先需要了解的是selenium rc的<a href="http://hi.baidu.com/wsh0102/blog/item/%20:;" target="_self"><u><strong>工作</strong></u></a>流程<br />
<img title="点击图片可在新窗口打开" style="width: 400px; cursor: pointer;" src="http://selenium.openqa.org/selenium-rc.png" alt="" /><br />
图片看起来好像复杂，但是实际上我们可以将所有的部件放到一台机器上。我们需要了解的是它的工作流程。<br />
selenium包含三个部件：<br />
测试程序(testing scrīpt)<br />
selenium rc (selenium <a href="http://hi.baidu.com/wsh0102/blog/item/%20:;" target="_self"><u><strong>server</strong></u></a>)<br />
browser (firefox, in my case)<br />
他们之间的关系如下<br />
testing scrīpt &lt;=&gt;selenium server &lt;=&gt; browser<br />
(1)测试程序将HTTP/HTTPS请求发给selenium server<br />
(2)selenium server将请求转发(also called proxing)给browser，<br />
(3)browser 执行请求，得到执行结果，然后回复给selenium server<br />
(4)selenium server 将回复转发给测试程序*<br />
(5)测试程序检验测试结果，记录之，然后执行下一个测试<br />
这个过程中，selenium server和browser必须要在同一台机器上，但是测试程序可以随意。我的配置是三者都在同一台机器上。<br />
<br />
测试环境配置 (testing environment configuration)<br />
* perl  （我使用的是perl） <br />
用perl写selenium的测试程序需要首先安装必要的module:  <a href="http://hi.baidu.com/wsh0102/blog/item/%20:;" target="_self"><u><strong>Test</strong></u></a>::WWW::Selenium  <br />
我的安装方式如下： <br />
$&gt; yum install perl.CPAN.386 &nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  -- yum 是<a href="http://hi.baidu.com/wsh0102/blog/item/%20:;" target="_self"><u><strong>linux</strong></u></a>里面的程序包安装程序 <br />
$&gt; perl -MCPAN -e "install Test::WWW::Selenium"&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --安装Selenium会同时要求你同时安装一些其它的module，比如Test::Mock Test::MockObject
Test::More Test::Exception Test::Mock:LWP Test::Pod.
如果你的CPAN配置好了的话，这些安装都是自动的，安装过程中如果有提问，直接回车就好，一般不会有太多问题 （如果需要重新配置perl
CPAN，比如说我<br />
&nbsp;&nbsp;  $&gt; perl -MCPAN -e "<a href="http://hi.baidu.com/wsh0102/blog/item/%20:;" target="_self"><u><strong>shell</strong></u></a>"&nbsp;&nbsp;<br />
&nbsp;&nbsp;  CPAN&gt; o conf init<br />
<br />
* <a href="http://hi.baidu.com/wsh0102/blog/item/%20:;" target="_self"><u><strong>JAVA</strong></u></a><br />
Selenium server 是用Java写的，所以你需要有JAVA。我开始用的是<a href="http://hi.baidu.com/wsh0102/blog/item/%20:;" target="_self"><u><strong>IBM</strong></u></a> JAVA 1.5后来才发现不行，就转到了SUN的JRE1.6<br />
<br />
* Selenium Core : 在selenium rc 的网站上说需要 selenium core，但是我的经验是不必管它<br />
<br />
* Selenium Server:  <br />
** 下载： Selenium 1.0<a href="http://archiva.openqa.org/repository/releases/org/openqa/selenium/selenium-remote-control/1.0-beta-1/selenium-remote-control-1.0-beta-1-dist.zip">Major release</a> <br />
** unzip selenium-remote-control-1.0-beta-1-dist.zip <br />
** 到这里其实就可以了，但是让程序跑起来，这里需要一个额外的配置： 将firefox-bin放到系统路径里面去<br />
&nbsp;&nbsp;  $&gt; export PATH=$PATH:/usr/lib/firefox-1.5.0.9*<br />
<br />
* HTTPS <br />
前面的都很简单。如果你不需要测试HTTPS，那么前面的配置就足够了。但是要让selenium server用HTTPS，还需要将一个专门用于测试的cert放到firefox里面去。步骤如下： <br />
** open firefox <br />
** import certificates:  <br />
*** go to "Edit-&gt;Preference"<br />
&nbsp;&nbsp;  -&gt; open "Advanced" tab<br />
&nbsp;&nbsp;  -&gt; click "Security" (or "Encryption" )&nbsp;&nbsp;<br />
&nbsp;&nbsp;  -&gt; click "view certificates", a new window will open,  <br />
&nbsp;&nbsp;  -&gt; then select "Web Sites" tab <br />
&nbsp;&nbsp;  -&gt; then click "import"（图片如下）<br />
<br />
<br />
<br />
3。最后一步，就是怎么让程序跑起来。这里有三个问题需要注意：<br />
1&gt; selenium rc beta 1。0 的SSL cert已经过期了(4/18/2008)，所以我们需要将我们的系统时间改回到过期之前。<br />
$&gt; date 041800002007<br />
2&gt; 需要用让selenium server使用刚刚设定好的firefox profile<br />
3&gt; 需要设置一个特定的参数（trustAllCertificates），让所有的SSL请求能够顺利通达。［这条在selenium正式的网站上没有写出来，是通过看源程序找到的］<br />
<br />
<br />
我的命令如下：<br />
<br />
让selenium server跑起来：<br />
<span style="color: rgb(0, 1, 255);">java -jar ~/server/selenium-server.jar "</span><br style="color: rgb(0, 1, 255);" />
<span style="color: rgb(0, 1, 255);">&nbsp;&nbsp;&nbsp;&nbsp;  -log /tmp/selenium.log "</span><br style="color: rgb(0, 1, 255);" />
<span style="color: rgb(0, 1, 255);">&nbsp;&nbsp;&nbsp;&nbsp;  -trustAllSSLCertificates "</span><br style="color: rgb(0, 1, 255);" />
<span style="color: rgb(0, 1, 255);">&nbsp;&nbsp;&nbsp;&nbsp;  -multiWindow "</span><br style="color: rgb(0, 1, 255);" />
<span style="color: rgb(0, 1, 255);">&nbsp;&nbsp;&nbsp;&nbsp;  -firefoxProfileTemplate /opt/ipatest.profile<br />
<br />
</span>15:52:10.698 INFO - Writing debug logs to /tmp/selenium.log<br />
15:52:10.699 INFO - Java: Sun Microsystems Inc. 10.0-b19<br />
15:52:10.699 INFO - OS: Linux 2.6.18-8.el5 i386<br />
15:52:10.702 INFO - v1.0-beta-1 [2201], with Core v1.0-beta-1 [1994]<br />
15:52:10.758 INFO - Version Jetty/5.1.x<br />
15:52:10.760 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]<br />
15:52:10.762 INFO - Started HttpContext[/selenium-server,/selenium-server]<br />
15:52:10.763 INFO - Started HttpContext[/,/]<br />
15:52:10.772 INFO - Started SocketListener on 0.0.0.0:4444<br />
15:52:10.773 INFO - Started org.mortbay.jetty.Server@5ac072<br />
<br />
让测试程序跑起来：<br />
<span style="color: rgb(0, 1, 255);">perl test.pl</span><br />
<br />
我的test.pl 程序开头部分如下：<br />
----------------------------<br />
#!/usr/bin/perl<br />
<br />
use strict;<br />
use warnings;<br />
use Time::HiRes qw(sleep);<br />
use Test::WWW::Selenium;<br />
use Test::More "no_plan";<br />
use Test::Exception;<br />
<br />
my $sel = Test::WWW::Selenium-&gt;new( host =&gt; "localhost",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  port =&gt; 4444,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  browser =&gt; "*firefox",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  browser_url =&gt; "https://some.com");<br />
<br />
$sel-&gt;open_ok("/testpage");<br />
$sel-&gt;click_ok("link=Add User");<br />
$sel-&gt;wait_for_page_to_load_ok("30000");<br />
$sel-&gt;type_ok("form_title", "auto001");<br />
$sel-&gt;type_ok("form_givenname", "selenium");<br />
$sel-&gt;type_ok("form_sn", "001");<br />
$sel-&gt;type_ok("form_krbprincipalkey", "redhat123");<br />
$sel-&gt;type_ok("form_krbprincipalkey_confirm", "redhat123");<br />
$sel-&gt;click_ok("document.form.submit[1]");<br />
$sel-&gt;wait_for_page_to_load_ok("30000");<br />
$sel-&gt;is_text_present_ok("s001 added!");<br />
$sel-&gt;click_ok("link=Find Users");<br />
$sel-&gt;wait_for_page_to_load_ok("30000");<br />
$sel-&gt;type_ok("uid", "s101");<br />
$sel-&gt;click_ok("//input["@value='Find Users']");<br />
$sel-&gt;wait_for_page_to_load_ok("30000");<br />
$sel-&gt;type_ok("uid", "s001");<br />
<br />
---------------------------<br />
我其实没有写什么东西，上面的程序都是selenium IDE自动录的。<br />
<br />
<br />
<br />
<a href="http://www.51testing.com/batch.download.php?aid=9701" target="_blank"><img style="width: 400px;" src="http://www.51testing.com/attachments/2008/05/95943_200805010620451.png" alt="" border="0" /></a><br />
</div>
<img src ="http://www.blogjava.net/ruoyoux/aggbug/286677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ruoyoux/" target="_blank">Blog of JoJo</a> 2009-07-14 13:58 <a href="http://www.blogjava.net/ruoyoux/articles/286677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>