![7711934f79f18e9a97dd2adddaa58dd2.png](https://i-blog.csdnimg.cn/blog_migrate/713960f13518e147a462bba55d51f324.png)
介绍下学习selenium的经验。之前有网友要求我给布置作业,那么我整理一下就全部列在这里。每一步给出一个小题目。
selenium是一个比较古老也比较流行的自动化测试库。他的特点是,版本较多,以至于在网上搜到很多教程都是过时的。
一、Selenium的家族成员
Selenium1:最老的,基于javscript实现的自动化测试框架。新项目上已经没什么人会选择这个了。又叫Selenium RC。
Selenium2:又叫Selenium Webdriver。从这里开始selenium和webdriver两个开源项目合并了。
Selenium3:2的后续。3和2有一些细微的不同。值得一提的是,Selenium2里firefox浏览器的driver不需要单独下载什么东西,直接能用。而到了3需要下载geckodriver才能用。这也是为什么你按照2的教程做会报错。“geckodriver executable needs to be in path” 这个错误是日常问题。
SeleniumIDE:录制回放工具,不用学。
SeleniumGrid:分布式执行selenium的框架。坑多效率低。初学者不用看。
Webdriver:对每个浏览器,有一个本地driver用来驱动他。这个所谓本地driver可能是一个独立的exe文件。
二、糟糕的官方教程
Selenium的官方网站和老版官方教程,让人摸不着头脑。但是,现在有新的官方教程了:http://seleniumhq.github.io/docs/ 也可以从selenium的github readme文件里进入。这个教程简洁多了。
但是,这个教程最大的问题是,有的地方用python,有的地方用java,有的地方又用ruby,令人无所适从。稍后我会整理一下其中python系需要的部分。而java系以前就有一本很好的selenium testing tools cookbook.
三、从写一个最简单的脚本开始
这里假设你已经顺利搭建了selenium的开发环境和已经初步掌握python的unit test库。
首先,不用unittest库,只用纯python+selenium尝试编写一个脚本。用selenium打开浏览器,进入一个网站比如百度,去搜索某个关键字,比如搜一下selenium。
不知道怎么用selenium启动浏览器?官网教程有例子:
![fa40b2b84c63b754db774f67c0775f36.png](https://i-blog.csdnimg.cn/blog_migrate/ce24e24d759c0f05c3b5991c8e39d864.jpeg)
以上只需要把谷歌改成百度。把定位语句里的id改一改。再把搜索关键字改一改。
四、给这个脚本加上断言
需要给一个脚本加上assert断言,这个脚本才能变成一个测试脚本。也就是在执行后知道结果是成果还是失败。
五、把这个脚本放到unittest里执行
至此,一个最最简单的测试脚本完成了。
六、安装firebug,firepath
做复杂的脚本之前,先安装firebug和firepath。这是两个firefox插件。可以帮助你在前期快速写出xpath定位语句。
七、挑战一个教复杂的脚本自己设计一个较复杂的测试场景,并用脚本实现。比如,打开豆瓣电影,测一下前5本电影的片名和导演名字。(预期结果可以写在某个文本文件里或直接写死在脚本里。)这个可以尝试改写成数据驱动形式的测试用例。
八、重构这个脚本,使用页面对象模式
上面做的脚本太长,而且非常不好维护,完全无法重用。所以才会有页面对象这种专门给selenium搞的设计模式。但是我不确定你能不能在网上找到python实现的例子,java的倒是很多。我之前也做过一个http://github.com/zhangting85/simpleWebtest 是我在某个公司写的框架的简化版。并且写了好多篇对应的博客来介绍我当时是怎么写的。但同样的问题就是这些教程很容易过时。时隔三四年,这样的一个小框架很有可能有各种问题。所以也只能当作参考。有空我可能把它重写成python的。
九、试试把unittest换成RobotFramework
robotframework是一个关键字驱动测试框架。这一步并不是说robotframework就比unittest高级,但读者可以试试用robot。这个框架还是有一定程度上的优点的,也有缺点。
至此,如果这些小题目都完成了,那基本上就算入门了。在写这篇文章的时候,顺便找了一圈python的selenium资料,可惜没看到比较好的。有空我再写点吧。
遇到问题了?
不懂怎么定位元素的,请看w3c school里的xpath教程。并结合使用firepath工具。
元素怎么也定位不到?
1.看有没有frame,2.尝试actions操作,3.让selenium调用原生js搞定。
首发于公众号:测试进阶(test_up)