Selenium 连续记录

上一篇 / 下一篇  2008-11-13 09:47:19 / 个人分类:Selenium

刚听到Selenium 这个词的时候好像是去年夏天吧。这里感谢一下Chestin Wang, 好像是他推荐的。
.~H F"F,lMt$p W0一开始使用selenium 自然会先使用简单的Core 模式,使用IDE 进行一些脚本的录制。然后回放。然后放在Core里面运行。但是用了一段时间之后发现Core越来越有局限性,不能满足自己程序的测试要求了。而且IDE很多东西都是录制不下来的,还有就是很多东西在IDE里面回放正常,但是放在core 里面运行就是有问题。那时候还在想,可能自己不够熟悉它,特别对他的那些命令。所以反复的在那里研究Selenium Reference. 但是后来发现有些问题还是解决不了。然后在 OpenQA 的论坛上发帖(http://clearspace.openqa.org/index.jspa)求助,网上找一样使用Selenium 的人帮助。
8N8[/fEG:Y?At0
-x)K%?(z O0经过一些时间的研究发现selenium rc 的功能好像强大一点。所以准备转向Selenium RC,好好的研究研究,看到底是怎么样的。(因为光看介绍里面好像吹的很厉害一样的,感觉什么都可以。但是实际上自己用的时候到处都是问题,所以要深入研究研究。)
WG4o3uz$i1t0研究 open source 的东西是比较痛苦的,因为其文档真的是很有限的,而且当时基本没有中文的文档,好像只有IBM网站上有一篇介绍selenium (http://www.ibm.com/developerworks/cn/java/wa-selenium-ajax/),还有就是有几个人在网上的几篇翻译的selenium的文档(http://wiki.javascud.org/display/SEL/Home)。51Testing软件测试网3S4hb9u Uw1@
所以其实主要的还是在OpenQA的论坛里面查,看有没有类似的问题人家已经解决的。然后自己拿过来尝试。51Testing软件测试网G[!i N$lz

%yu#q d8D0最初的用的东西是Java+Firebug +selenium IDE +selenium rc +eclipse +junit.因为一开始的程序 IDE还是可以录制大部分的,所以把IDE录制的东西修改修改就成了可以跑的 testcase. 而且当时一上来肯定是用junit来跑。
.aW&R7Ih&e+Uxr0
!s(ws:o\6?| a#T0单个可以跑了,那就要考虑多个了,不过这个也简单,junit 本来就有testsuite.这样多个也可以跑了。51Testing软件测试网,L!oDj M+e9d
可以跑了。 那该考虑跑完后的测试结果了,就是所谓的report了。总不能再Eclipse里面,看一下就没了,不能保存一起。所以又研究。发现junit ant task里面有report 功能。。所以在这个时候引入了ant + junit report 来生成 pdf格式的report.
+mA8p f!T{+P u051Testing软件测试网 w6Oqs \ O]
好了report 有了,但是运行过程中有问题的话,怎么去debug,怎么去发现哪里出的问题呢。这就需要log.最初看log也就只能在slenium server 的console里面,可以看到出错信息能。selenium server 启动的时候-log 参数记录的东西可读性太差了,不符合要求。所以继续research。。发现有一个人写了一个叫loggingSelenium(http://loggingselenium.sourceforge.net/usage.html) 的东东,拿来一用感觉还不错,每个case可以生成记录selenium 命令的html格式的result了。不过当是不支持assert 命令的记录。其实后来看了它的运行机制就明白了。他记录的是selenium command ,而assert 是junit testcase里面的命令。不过即使assert不能记录也足够用了。51Testing软件测试网3W4~3w E#iT&c(X ^

R/`D~,Z?'w/ob0-----------------------------------51Testing软件测试网 yy3N3Jkq
51Testing软件测试网`Ch-|5W6MS
好了。一些东西都有了,接下去让我们再看看用java写的testcase。selenium 的command是基于html element的locator 的,其实selenium 并不关心element type.一般的selenium 的命令都是command(locator, value) 这样格式的。从这样的命令中我们根本看不出selenium 在对哪个element进行操作。特别是testcase比较长的情况下。可读性很差,导致到时候有问题debug起来也很麻烦。51Testing软件测试网*o+R.KIM4iwO$b
51Testing软件测试网py+\Bs|*s:nMZ \
还有一个决定因素就是我们的application用的是extjs,里面的widget很多,所以最好的脚本形式是widget.command(),这样形式的。这样可读性强很多。比如button.click(),textfield.setvalue("abc"),grid.selectRow("afdaf");combobox.selectItem("value"); 但是没执行这样一个命令,对应的selenium命令可能不只一个,而且操作对象可能也不只一个htm element。。 所以在这个时候,我们决定封装selenium。首先建立一个对应的widget的库已经对应的一些测试的API.比如Grid 需要的api有selectRow,sortAs,nextPage,prePage等等。。。。然后用selenium command 组合去一一实现他们。这个是我所花时间最多的地方。从今年两三月份到现在一直在不断的添加测试API.其实主要是参考silktest里面提供的一些主要常用的方法的。
6c:PvfE:~b k2C,` Y0
c)@8K1^~3XO:\0封装好之后我们的脚本就变的很简洁了,比如homepage.open("www.googel.com");homepage.tfSearch.setText("Selenium");homepage.btnSearch.click();homepage.waitForPageToLoad(10); homepage.assertTextPresent("Selenum");..................
O-z%x7cS/l F'i[0就是这样tester在看脚本的时候知道selenium在干什么,而且可以和手动的test case的步骤一一对应起来。51Testing软件测试网H o o P CE h
51Testing软件测试网9Al8Q8^oOh~ `
接下来的问题是怎么增加 测试脚本debug的效率。。因为我们现在只有selenium command level 的log(loggingSelenium). 因为我们的tester写的是 element.command 这样的测试脚本。但debug的时候让他去看selenium command level log,也是很麻烦的,因为可能不知道这个element的命令,到底对应哪几个selenium command。所以在这里我们引入了element command level log.就是每个element的action 都添加一个log信息,这个就相对简单了。用了commons-logging + log4j 很容易实现的。
`gH"Ry!aZ051Testing软件测试网Lg:L$L;m-x2E%U?f E
下面一个问题是要考虑一下代码的维护代价了。把test data 和element locator 放在脚本里面好像不合适。测试脚本不能重用。第二万一UI界面稍微改动导致locator 改动,这样需要去修改所有用到这个element的脚本,那代价也是很高的。
1ipq3vg0
ntUf(ka2~0--------------------------------------
l x1S X*Bj'?;~/Hc0
!_d|(g&@$G%oc^` ~0所以用了一个declaration 这个概念,就是你写脚本的时候,要使用控件之前,先在另外的脚本里把这些控件给声明好,在web里主要就是locator。可以是id,name, 或者xpath,其实用的最多的还是xpath,因为ajax的东西很多都是动态生成的。有了declaration 之后,UI界面稍微点位置调整的话,对脚本就影响很小了,只要修改这个declaration 里面的locator.51Testing软件测试网0e;]Z&D&{e:Hf
51Testing软件测试网9^YIH;aD(G[T5v
另外关于测试数据,很传统的,存在excel文件里面。用key-value 的方式。51Testing软件测试网UW~e v&y
51Testing软件测试网&n$`vwm_
--------------------51Testing软件测试网K3Wc7V7t}8S

E&a9\c t2SZ$dq*d0继续待续。。。最近在 研究selenium IDE ..
mi8~X.LD E h q;U051Testing软件测试网!X.SqK5I)X6_g.| i4o

8]p^'A|o~+q(?0

TAG:

雷子的blog 引用 删除 louis_lu   /   2010-03-28 10:26:36
Bruce,你好
我也在研究loggingselenium,使用的技术框架也是:Selenium IDE+fireBug+junit+Selnium RC + eclipse,但是最近是在使用中发现,最后生成的html报告文件中,只显示一个test case的结果,其他的case都没有被记录,但是screenshot目录中却都有记录其他case的相关信息。不知是否遇到过类似的问题,请教了,谢谢。
引用 删除 kuangjian7   /   2008-11-13 18:37:46
看了所有的关于selenium的文章   可惜还是一头雾水     可能是和我刚开始看有关吧   不过仍然希望尽快看到你更新的内容
 

评分:0

我来说两句

Open Toolbar