Selenium入门小结

2011-01-14  籽藤 

      已经参与到欧洲LindBak POS loyalty项目中,上周开始学习Selenium,准备功能测试自动化的脚本。故有此文。

      Selenium是什么?

下载:http://seleniumhq.org/download/  
    
 有一句广告词是:XX,改变了我对隔离霜的看法。我只能说,Selenium,改变了我对测试工具的看法。

Selenium分为三部分:
   1.Selenium Core

   2.Selenium IDE

   3.Selenium RC(Remote Control)
     
 对于Selenium Core,我在测试中没有涉及,不敢妄言。

      Selenium IDE以火狐插件的形式存在;录制操作非常简便,且自动生成的脚本可转换为Java、C#、Php等多种主流的编程语言。我们可以直接在自己熟悉的IDE环境和单元测试框架(如VisualStudio NUnit)中调用Selenium提供的方法,去模拟用户操作。

      Selenium RC中包括了多种语言的client-driver以及selenium server。要在VS中调用Selenium方法,需要把Selenium RC中‘dotnet-client-driver’的dll文件作为reference添加到项目中。而selenium server需要在JDK环境下启动。即: java -jar selenium-server.jar -interactive

      没错,我们将Selenium IDE自动生成的C#代码稍作修改,在VS的Test Project中导入Selenium相关的dll文件,就可以直接把测试代码跑起来了  

      功能测试自动化,你需要考虑得更多

“功能测试”这四个字的背后,意味着:

  • 一个简单的文本框,对应多次测试。这些测试的点击、输入等动作是一样的,不同的是输入的数据;
  • 某一项输入导致的Fail,不能影响其他输入情况的测试
  • 测试人员可以方便地更新测试数据
  • …… ……

      我们还需要做什么

 Test Case
       
我们没有采用Test runner模式,没有利用Selenium自身的测试套件去跑Case,因为这种模式是基于Selenium Core的,需要将编写好的测试套件对应的Html页面、Selenium Core,以及被测Web系统一起部署在同一服务器上。(这跟浏览器Javascript的安全限制有关,也就是所谓的‘同源策略’。详情可问Google)这种Test runner模式,可以在后期有专门的测试服务器上进行。  

       我们目前采用的是Driver模式。也就是基于SeleniumRC,更强大更灵活的方式。即,在VS中编写额外的测试代码作为脚本,这些脚本将通过Selenium Remote Control提供的Selenium Server,与浏览器中的Selenium Core进行通信。也就是说,我们是利用SeleniumRC解决Test runner模式下的‘同源策略’问题,对任意Web站点进行测试,而无需将测试脚本和Web系统部署于同一服务器上。


 Test Result
      目前最新的Selenium版本1.0.1,没有实现Report机制,官方提倡用编程语言本身提供的Report方法,或第三方Report Tool实现。由于我们是在Visual Studio环境下用C#写代码,自然而言地想到NUnit、Microsoft.VisualStudio.TestTools.UnitTesting这些单元测试框架,而事实上,这些单元测试框架产生的Test Result,并不能满足我们对功能测试Report数据的要求。原因很简单,比如,我们测试“除法”需要2个参数a,b,在外部的测试数据文件中有“a=1、b=0”和“a=4、b=2”。对于NUnit Assert的Report,如果在“a=1、b=0”时出现Failed,那么“a=4、b=2”这个case就不会继续跑下去,此其一;其二,如果“除法”的Test Method Failed,在NUnit生成的报告中没有详细的输入参数。所以,我们要跳出NUnit这个框框,自己对Excepted和actual进行判断,从而输出我们需要的信息到Test Result中。
 
       学习资料
 《Selenium私房菜》(新手入门教程) http://www.cnblogs.com/hyddd/archive/2009/05/30/1492536.html
 《用 Selenium 自动化验收测试》 http://www.ibm.com/developerworks/cn/java/wa-selenium-ajax/
 
      问题札记
 Q:Firefox3 could not be found in the path
       添加Firefox.exe所在的目录到Path环境变量中即可
 Q:Selenium RC弹出的Firefox网页报Proxy Error 502错误(如下图)

 在Firefox中设置:工具-》选项-》高级-》网络中,设置“无代理”即可

Q:如何获得Web页的Table中某行某列的值

string username=selenium.GetTable("ctl00_ContentPlaceHolder_GridViewUsers.1.2");
注:ctl00_ContentPlaceHolder_GridViewUsers是Table id;1是Row;2是Column

Q:如何获得Table最后一行某个单元格的值

string memberId = selenium.GetText("//table[@id='ctl00_ContentPlaceHolder_GridViewMbrSets']/tbody/tr[last()]/td[2]");

最后,建议大家用Firebug先定位好元素,这样,用起xPath获值就方便多了。

335°/3351 人阅读/0 条评论 发表评论

登录 后发表评论