前几天看到有老外发微博说selenium不是自动化测试工具,在震惊之余我陷入了沉思,这种说法其实是有道理的,原来这个工具用了这么多年,这个隐藏的秘密我竟然一直没有发现。

很久很久之前,我在各种国外的测试论坛发现大家都在讨论一种新的工具:selenium,先入为主,由于在测试论坛最先产生的大范围讨论和关注,我一直把selenium当作是根正苗红的测试工具,这么多年来一直没有对这个观点产生过一点点的怀疑,哪怕selenium其实很多时候被人用作爬虫,很多时候被别有用心的人拿来做自动化的工具以获取不法收入,哪怕很多时候被用来做一些效率提升的工具,我都没有过一丝丝的动摇,在我心里,selenium就是最硬核的浏览器自动化测试工具之一。


直到最近几天不经意间看到有人说(以下内容来自机翻)

测试工具供应商能否请停止将他们的工具与 Selenium 进行比较!我厌倦了这个!Selenium webdriver是一种自动化工具,而不是用于测试!当然,与非专业的测试工具相比,你开发的专门用于测试的测试工具看起来当然是很不错的了。拜托,歇歇吧。

看到上面的这条言论我才突然间意识到,selenium webdriver一直在不停的迭代,尽管速度很慢,但webdriver的各个版本里似乎总缺少点什么。于是有人总在搜索selenium的时候加上关键字pytest或者junit,于是我总是喜欢在面试的时候问你们用selenium的时候用的是哪个测试框架,于是专门有人写文章描述如何在断言里使用expected_conditions。这些证据都非常肯定的证明了selenium其实并不是专门为自动化测试设计的工具,selenium的核心是自动化工具,测试只是其应用的一部分场景而已,selenium明显格局更大,路走的更宽,真正掩耳盗铃的是我,我才是那个永远不能被叫醒的装睡的人。

渐渐的我意识到,怪不得我之前在公开课里演示selenium的应用时总是喜欢用selenium做爬虫的例子,怪不得我之前跟一些同学留的练习里,selenium扮演的角色也只是做效率提升的工作,比如每天签到之类,其实大部分时间我使用selenium只是把它当作是自动化的工具,测试真的只是我使用selenium的一个特别的场景,在这个场景里,一些工作变得很难,比如断言;一些情况我需要考虑的更多,比如各种环境和配置问题;一些问题变得很棘手,比如用例的修改速度往往赶不上页面重构的速度等等;我写selenium最有成就感,最得心应手,写着写着有点像读爽文的场景往往是

  • 对爬取速度没有要求的爬虫
  • 君子能不动手就不动手的场景,比如每天签到领金币

这些场景往往跟测试无关,与兴趣有关。

很久之前写的从知乎爬内容的selenium脚本,那时候firefox driver还是webdriver的自带驱动。

"""
从zhihu.com获取每日最热和每月最热
"""from selenium import webdriver
from datetime import dateimport sys
reload(sys)
sys.setdefaultencoding("utf-8")class Zhihu:def __init__(self):self.daily_url = 'https://www.zhihu.com/explore#daily-hot'self.monthly_url = 'https://www.zhihu.com/explore#monthly-hot'def __enter__(self):self.dr = webdriver.Firefox()return selfdef __exit__(self, p1, p2, p3):self.dr.quit()def get_daily_hots(self):result = []hots_urls = self.get_daily_hots_urls()for url in hots_urls:result.append(self.get_answer(url))return resultdef get_answer(self, url):self.dr.get(url)# wrap_div = self.dr.find_element_by_css_selector('.zm-item-answer.zm-item-expanded')article = {}article['question'] = self.dr.find_element_by_css_selector('#zh-question-title').textarticle['author'] = self.dr.find_element_by_css_selector('.author-link').textarticle['answer'] = self.dr.find_element_by_css_selector('.zm-editable-content.clearfix').get_attribute('innerHTML')return articledef get_monthly_hots(self):passdef get_daily_hots_urls(self):self.dr.get(self.daily_url)wrap_div = self.dr.find_element_by_class_name('tab-panel')title_url_elements = wrap_div.find_elements_by_class_name('question_link')assert len(title_url_elements) == 5urls = []for title in title_url_elements:urls.append(title.get_attribute('href'))return urlsclass ZhihuReporter:def __init__(self, path):self.report_path = pathself.f = open(path, 'wb')def write_header(self):self.f.write('<html><head><meta charset="utf-8">')self.f.write('<link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css">')self.f.write('<title>Zhihu Report</title></head>')def write_body(self):self.f.write('<body>')def finish_body(self):self.f.write('</body>')def write_article(self, articles):self.f.write('<h3>知乎%s最热</h3>' %(date.today().strftime('%Y_%m_%d')))for article in articles:self.f.write('<div class="container">')article_html = '<h3>%s<small>%s</small></h3>' %(article['question'], article['author'])article_html += article['answer']self.f.write(article_html)self.f.write('</div>')self.f.write('<hr>')def finish_report(self):self.finish_body()self.f.write('</html>')self.f.close()def build_article_report(self, articles):self.write_header()self.write_body()self.write_article(articles)self.finish_report()if __name__ == '__main__':with Zhihu() as zhihu:articles = zhihu.get_daily_hots()report_name = 'zhihu_%s.html' %(date.today().strftime('%Y_%m_%d'))reporter = ZhihuReporter(report_name)reporter.build_article_report(articles)

其实这样看来,selenium作为自动化测试工具其实是有一定门槛的,比如需要结合测试框架,需要自定义po,需要手动维护一些复杂的等待情况,需要自己实现重试机制,更被说框架,断言,报告这祖传的三座大山了,正是因为这些痛点的存在,一些新的测试工具应运而生,这些工具为测试这个精准的场景提供了自己的解决方案,比如内置断言,自带测试报告等等,让自动化测试更容易,更稳定,更专业,也正是因为这些工具补齐了selenium所谓的一些“短板”,工具提开发商们便会不停的把selenium拿出来各种比较,以体现自己的先进性和革命性。不过这种比较是偏颇的,就像是在足球的世界里很多球员的头球能力都比梅西要强,但在进攻综合实力上梅西还是独一档的存在。这些专业的自动化测试工具就像是锤子或者起子,在某一方面很强,但selenium更像是个工具箱,适用的场景更多元化一些。


如果你问我这些专业的自动化测试工具我是不是不推荐,其实我的答案是否定的。

如果这些工具能让我们以更小的代价更低的成本来实现自动化测试的工作,我们何乐而不为呢?让工作变得更有效率,有更多的时间去做一些自己感兴趣的事情其实一直都是很多测试同学努力的方向。也许在未来的某一天,我会在工作中使用一些专业的自动化测试工具来帮我低成本实现测试的自动化,然后节省下来的时间写一些随性的selenium脚本,实现一些有趣的功能,这也未尝不是一件令人感到身心愉悦的事情。


最后: 大家可以去我博客首页看下侧边栏! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

震惊:selenium竟然不是自动化测试工具相关推荐

  1. #软件测试###浅谈几个UI自动化测试工具

    一.Selenium 一个web的自动化测试工具,相比QTP而言支持多种语言,QTP只支持VBS,支持多平台,支持分布式测试用例的执行.selenium主要使用的工具是WebDriver. WebDr ...

  2. 常用的WEB自动化测试工具

    主流自动化测试工具–QTP QTP是一个侧重于功能的回归自动化测试工具;提供了很多插件. QTP支持的脚本语言是VBScript,这对于测试人员来说,感觉要"舒服"得多.VBScr ...

  3. 【tips】自动化测试工具 - selenium和phantomJS

    ### 目录清单 selenium和phantomjs概述 selenium常用API 案例操作:模拟登陆csdn 1. selenium和phantomJS是什么东西 selenium是一套web网 ...

  4. 开源 软件测试自动化工具,开源Web自动化测试工具Selenium IDE

    Selenium IDE(也有简写SIDE的)是一款开源的Web自动化测试工具,支持测试用例的录制与回放. 只要在浏览器里装一下插件,就可以开始使用,简直是"开箱即用".我们相信测 ...

  5. python自动测试p-python网络爬虫之自动化测试工具selenium[二]

    @ 前言 hello,大家好,在上章的内容里我们已经可以爬取到了整个网页下来,当然也仅仅就是一个网页. 因为里面还有很多很多的标签啊之类我们所不需要的东西. 额,先暂且说下本章内容,如果是没有丝毫编程 ...

  6. Python实训day07am【爬取数据接口、webdriver、自动化测试工具selenium】

    Python实训-15天-博客汇总表 目录 1.网络爬虫-课后练习题 1.1.写法1 1.2.写法2 2.Selenium自动化测试工具 2.1.安装工具 2.2.命令行操作 直接爬取HTML (30 ...

  7. 自动化测试工具selenium python_Selenium自动化测试工具使用方法汇总

    1.设置无头浏览器模式 from selenium import webdriver from selenium.webdriver.chrome.options import Options chr ...

  8. Python3 爬虫学习笔记 C04 【自动化测试工具 Selenium】

    Python3 爬虫学习笔记第四章 -- [自动化测试工具 Selenium] 文章目录 [4.1]下载驱动 [4.2]声明浏览器对象 [4.3]访问页面 [4.4]启动参数 [4.5]查找节点 [4 ...

  9. selenium python实例录制运行_WEB自动化测试工具selenium录制器使用笔记

    简介 selenium录制器是最近刚流行起来的一个WEB自动化测试工具,由多测测团队开发. Selenium录制器采用关键字驱动的理念,简化测试用例的创建和维护,可以直接运行在浏览器中,就像真正的用户 ...

最新文章

  1. 【微服务架构】SpringCloud之Eureka入门篇
  2. Apollo代码学习(六)—模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码
  3. ssh调用expect使用以及shell同时传入两个参数调用
  4. 1.3 matlab常用的内部数学函数
  5. oracle 查询各科前3名_2020年山东高校排行榜前3无悬念,山东理工大学省内第17全国250名...
  6. Quartus16.0如何使用TCL脚本
  7. python编程工时计算_Python编程题:两个日期间的天数统计(附代码)
  8. SQL_server 数据库备份信息查看
  9. 现在流行的大前端是什么,自己需要了解哪里内容?
  10. 【杂题总结】洛谷-3959 宝藏
  11. 微信小程序滚动条返回顶部
  12. 旋转链表 Java,leetcode 旋转链表 Java
  13. VB 获取文件名后缀
  14. IDEA+Gradle搭建Spring Boot项目
  15. 一、Arduino介绍
  16. 计算机网络_选择题(一)
  17. SpringCloud快速上手
  18. 移动开发技术(Android)——综合实验
  19. BeanCopy 常用工具类
  20. python_习题练习_5_小游戏《唐僧大战白骨精》

热门文章

  1. java运行时异常的特点是什么_java异常详解
  2. python machinelearning下载_Python与机器学习系列1:Anaconda的下载与安装
  3. python dataframe是否为空_python if条件判断dataframe是否为空
  4. mysql linux压缩包官网下载_mysql for linux 压缩包下载
  5. java 源码学习,Java源码剖析34讲学习笔记~4
  6. java中创建类的时候有没有分配内存,你必须了解的java内存管理机制(一)-内存分配...
  7. mysql进程异常_关于MySQL-Proxy子进程异常退出BUG修复
  8. ajax调用后台java方法,jquery ajax再次封装,前台调用后台java方法直接返回数据
  9. 系统关机函数ExitWindowsEx详解
  10. mysql 大小写敏感设置_MySQL 中的大小写敏感设置