bruce.gu 发表于 2008-11-12 11:07:01

Selenium 连续记录【有啥问题可以在这里问,一起讨论】

本帖最后由 bruce.gu 于 2011-3-27 11:12 编辑

http://seleniumcn.cnSelenium中文论坛。

刚听到Selenium 这个词的时候好像是去年夏天吧。这里感谢一下Chestin Wang, 好像是他推荐的。
一开始使用selenium 自然会先使用简单的Core 模式,使用IDE 进行一些脚本的录制。然后回放。然后放在Core里面运行。但是用了一段时间之后发现Core越来越有局限性,不能满足自己程序的测试要求了。而且IDE很多东西都是录制不下来的,还有就是很多东西在IDE里面回放正常,但是放在core 里面运行就是有问题。那时候还在想,可能自己不够熟悉它,特别对他的那些命令。所以反复的在那里研究Selenium Reference. 但是后来发现有些问题还是解决不了。然后在 OpenQA 的论坛上发帖(http://clearspace.openqa.org/index.jspa)求助,网上找一样使用Selenium 的人帮助。

[ 本帖最后由 bruce.gu 于 2008-12-5 13:40 编辑 ]

bruce.gu 发表于 2008-11-12 11:07:22

经过一些时间的研究发现selenium rc 的功能好像强大一点。所以准备转向Selenium RC,好好的研究研究,看到底是怎么样的。(因为光看介绍里面好像吹的很厉害一样的,感觉什么都可以。但是实际上自己用的时候到处都是问题,所以要深入研究研究。)
研究 open source 的东西是比较痛苦的,因为其文档真的是很有限的,而且当时基本没有中文的文档,好像只有IBM网站上有一篇介绍selenium (http://www.ibm.com/developerworks/cn/java/wa-selenium-ajax/),还有就是有几个人在网上的几篇翻译的selenium的文档(http://wiki.javascud.org/display/SEL/Home)。
所以其实主要的还是在OpenQA的论坛里面查,看有没有类似的问题人家已经解决的。然后自己拿过来尝试。

bruce.gu 发表于 2008-11-12 11:07:45

最初的用的东西是Java+Firebug +selenium IDE +selenium rc +eclipse +junit.因为一开始的程序 IDE还是可以录制大部分的,所以把IDE录制的东西修改修改就成了可以跑的 testcase. 而且当时一上来肯定是用junit来跑。

单个可以跑了,那就要考虑多个了,不过这个也简单,junit 本来就有testsuite.这样多个也可以跑了。
可以跑了。 那该考虑跑完后的测试结果了,就是所谓的report了。总不能再Eclipse里面,看一下就没了,不能保存一起。所以又研究。发现junit ant task里面有report 功能。。所以在这个时候引入了ant + junit report 来生成 pdf格式的report.

bruce.gu 发表于 2008-11-12 11:08:25

好了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不能记录也足够用了。

bruce.gu 发表于 2008-11-12 11:27:18

今天就这些。明天继续。

bruce.gu 发表于 2008-11-13 09:45:18

好像没人看哦。放到blog里去算了。http://www.51testing.com/?111742

xzl 发表于 2008-11-13 14:29:20

好贴

和我的研究轨迹差不多

月上百合 发表于 2008-11-13 17:03:10

我就用的很浅就用了一下IDE.没有这么深哦,

kuangjian7 发表于 2008-11-13 18:17:53

谁说没人看的小弟就正在学习中    感谢!!! :handshake

厍仕杰 发表于 2008-11-13 20:08:31

:lol :lol

indiepop 发表于 2008-11-14 13:21:12

又是一未知领域,见识了。

bruce.gu 发表于 2008-11-14 14:06:25

好了。一些东西都有了,接下去让我们再看看用java写的testcase。selenium 的command是基于html element的locator 的,其实selenium 并不关心element type.一般的selenium 的命令都是command(locator, value) 这样格式的。从这样的命令中我们根本看不出selenium 在对哪个element进行操作。特别是testcase比较长的情况下。可读性很差,导致到时候有问题debug起来也很麻烦。

还有一个决定因素就是我们的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里面提供的一些主要常用的方法的。

封装好之后我们的脚本就变的很简洁了,比如 homepage.open("www.googel.com");homepage.tfSearch.setText("Selenium");homepage.btnSearch.click();homepage.waitForPageToLoad(10); homepage.assertTextPresent("Selenum");..................
就是这样tester在看脚本的时候知道selenium在干什么,而且可以和手动的test case的步骤一一对应起来。

bruce.gu 发表于 2008-11-14 14:07:01

接下来的问题是怎么增加 测试脚本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 很容易实现的。

下面一个问题是要考虑一下代码的维护代价了。把test data 和element locator 放在脚本里面好像不合适。测试脚本不能重用。第二万一UI界面稍微改动导致locator 改动,这样需要去修改所有用到这个element的脚本,那代价也是很高的。

bruce.gu 发表于 2008-11-14 14:07:14

所以用了一个declaration 这个概念,就是你写脚本的时候,要使用控件之前,先在另外的脚本里把这些控件给声明好,在web里主要就是locator。可以是id,name, 或者xpath,其实用的最多的还是xpath,因为ajax的东西很多都是动态生成的。有了declaration 之后,UI界面稍微点位置调整的话,对脚本就影响很小了,只要修改这个declaration 里面的locator.

另外关于测试数据,很传统的,存在excel文件里面。用key-value 的方式。

bruce.gu 发表于 2008-11-14 14:07:33

待续。。。

kuangjian7 发表于 2008-11-16 20:15:37

顶一个先。。。。

:(      XPATH 怎么看的时候很清楚   到写就不知道怎么写了            继续埋头苦看!!!!

bruce.gu 发表于 2008-11-21 11:06:18

看一下w3c 的 xpath language ,然后装一个firebug + xpath checker,另外 xpath 在ie里和在firefox里面有些不一样的。有些表达式在ie里不能用,因为ie本身不支持xpath,只是selenium内嵌了一个解析器。

[ 本帖最后由 bruce.gu 于 2008-11-21 11:08 编辑 ]

bruce.gu 发表于 2008-11-21 11:14:19

原帖由 bruce.gu 于 2008-11-14 14:07 发表 http://bbs.51testing.com/images/common/back.gif
所以用了一个declaration 这个概念,就是你写脚本的时候,要使用控件之前,先在另外的脚本里把这些控件给声明好,在web里主要就是locator。可以是id,name, 或者xpath,其实用的最多的还是xpath,因为ajax的东西很多都 ...

接下去该考虑所谓的并行测试了。就是同是跑多个测试线程。这里就是引入 testng和selenium grid 的时候了。
由于junit 本身不支持parallel 所以,当时就把junit去掉改用testng来跑test了。另外selenium grid也不难,不需要他安装包里面那么多东西,只要selenium-grid-hub-standalone-1.0.2 , selenium-grid-remote-control-standalone-1.0.2 和 grid_configuration.yml 和原先的selenium server放一起。然后改一下它的build文件就ok了。

kuangjian7 发表于 2008-11-24 13:55:46

顶个先
:lol

bruce.gu 发表于 2008-11-26 11:40:07

但是多线程就会引起 log日志混乱。各个线程的全都交错在一起,debug起来太麻烦了。
页: [1] 2 3 4 5 6
查看完整版本: Selenium 连续记录【有啥问题可以在这里问,一起讨论】