我打算写一堆浏览器扩展(每个流行的浏览器相同的功能)的。 我希望,某些代码将被共享,但我不知道这呢。 可以肯定的一些扩展将使用原生API。 我有TDD / BDD没有太多的经验,而且我认为这是一个启动如下因素从这个项目这些想法的好时机。
问题是,我不知道如何处理它。 我应该写为每个浏览器不同的测试? 我应该走多远这些测试? 这些扩展将是很简单 - 在本地存储一些数据,刷新页面,并通过网络套接字听。
而我的观察,为什么难呢,我 - 因为有很多的行为,并没有这么多的机型,这也依赖一个平台上。
我打算写一堆浏览器扩展(每个流行的浏览器相同的功能)的。 我希望,某些代码将被共享,但我不知道这呢。 可以肯定的一些扩展将使用原生API。 我有TDD / BDD没有太多的经验,而且我认为这是一个启动如下因素从这个项目这些想法的好时机。
问题是,我不知道如何处理它。 我应该写为每个浏览器不同的测试? 我应该走多远这些测试? 这些扩展将是很简单 - 在本地存储一些数据,刷新页面,并通过网络套接字听。
而我的观察,为什么难呢,我 - 因为有很多的行为,并没有这么多的机型,这也依赖一个平台上。
我练习测试我的浏览器扩展的两种不同的方式:
我将使用跨浏览器的YouTube歌词由罗布W¯¯扩展为整个答案的例子。 这个扩展的核心是用JavaScript编写的,并与AMD模块组织。 构建脚本生成扩展名的文件为每个浏览器。 与r.js ,我精简的特定浏览器的模块,例如一个为跨来源的HTTP请求和永久存储器(对于喜好),并用吨为polyfills IE的一个模块包含。
扩展插入带有歌词在YouTube上,的Grooveshark和Spotify当前播放歌曲的面板。 我有过这些第三方网站没有控制,所以我需要一个自动化的方式来验证扩展依然很不错。
在开发过程中:
之前的版本:
我用摩卡 + expect.js编写测试。 我不为每个模块测试每一个方法,只是重要的项目。 例如:
该DOM解析方法。 在野外(包括jQuery的)大多数DOM分析方法都存在缺陷:任何外部资源的加载和执行的JavaScript。
我验证DOM解析方法正确分析DOM无副作用。
偏好模块:我验证数据可以保存并返回。
我的分机获取来自外部来源的歌词。 这些源在单独的模块中定义。 这些定义识别和使用的InfoProvider
模块,这需要一个查询,(黑盒子),并输出搜索结果。
InfoProvider
模块的功能正常。 InfoProvider
),并验证结果预计: 无论是UI没有明显打破,例如通过点击关闭按钮。
这些测试可以直接从本地服务器,或在浏览器扩展运行。 本地服务器的好处是,你可以编辑测试并刷新浏览器看到的结果。 如果所有这些测试都通过了,我跑在浏览器扩展测试。
通过传递一个额外的参数debug
到我的构建脚本,单元测试捆绑了我的扩展。
在网页中运行测试是不够的,因为扩展的环境可以从正常的页面有所不同。 例如,在一个Opera 12扩展,没有全球location
对象。
备注:我不包括在发布版本的测试。 大多数用户并不需要报告和调查的错误的努力,他们只会给低评级,并说像“不工作”。 确保无明显的错误你的扩展功能之前,把它运。
我用Selenium 2来测试我的分机是否仍然工作在YouTube上,的Grooveshark(3次)和Spotify。
最初,我只是用硒IDE记录测试,看看它是否工作。 这很顺利,直到我需要更多的灵活性:我想有条件地运行取决于测试账户是否或没有登录测试。 这是不可能的默认硒IDE(有人说是可能与流量控制插件 -我还没有尝试过)。
硒IDE提供导出现有的测试其他格式的选项,包括JUnit 4个测试(JAVA)。 不幸的是,这个结果并不令人满意。 许多命令无法识别。
于是,我放弃了硒IDE,并切换到硒。
请注意,当你搜索“硒”,您就会找到硒RC(硒1)和硒的webdriver(硒2)信息。 首先是应该用于新项目的老弃用,后者(硒的webdriver)。
一旦你发现的文件是如何工作的,这是很容易使用。
我喜欢的文档在项目页面,因为它通常简洁(在维基 )和完成(在Java文档 )。
如果你想快速上手,请阅读入门wiki页面 。 如果你有空闲时间,看看通过在SeleniumHQ文档 ,特别是硒的webdriver和webdriver的:高级用法 。
硒电网也值得一读。 此功能允许您在不同的(虚拟)机分发测试。 伟大的,如果你想测试在IE8,9和10分机, 同时 (对运行Internet Explorer的多个版本,你需要虚拟化)。
自动化测试是很好的。 更重要的是漂亮的? 自动化安装扩展!
该ChromeDriver和FirefoxDriver支持扩展的安装,在看到这个例子 。
对于SafariDriver ,我写了两个类来安装自定义Safari浏览器扩展。 我已经出版,并在公关硒发送,所以它可能是提供给大家的未来: https://github.com/SeleniumHQ/selenium/pull/87
该OperaDriver不支持安装自定义扩展的(从技术上讲,它应该是可能的,虽然)。
需要注意的是与来临铬供电歌剧院 ,老OperaDriver不起作用了。
这里有一个Internet Explorer的驱动程序 ,而这一次也绝对不会允许一个安装自定义扩展。 Internet Explorer不具有扩展的内置支持。 扩展是通过MSI或EXE安装程序,它甚至没有集成在Internet Explorer安装。 因此,为了自动安装在IE中您的扩展,你需要能够平静地运行,它安装您的IE插件的安装程序。 我没有试过呢 。
测试浏览器扩展所带来对我来说有些难度为好,但我在,我可以从硒带动浏览器同时调用了几个不同的区域实施的测试解决。
我使用的步骤是:
首先,我写集成到可以通过简单地将一个特定的URL被激活的扩展代码测试代码。 当分机看到这个URL,它开始运行测试。
然后,在激活扩展的测试页我执行服务器端的测试,以确保该API执行,并记录和日志的问题在那里。 我记录方法调用,他们把时间和任何错误。 所以,我可以看到扩展调用的方法,网络性能,业务逻辑性能和数据库的性能。
最后,我自动调用浏览器在特定URL指向,并与其他测试信息,错误等使用Selenium任何给定的客户端系统上沿记录他们的表现:
http://docs.seleniumhq.org/
这样我可以打破测试的浏览器,扩展,服务器,应用程序和数据库方面,并根据具体的测试集所有这些连接在一起。 这需要一些工作来把它放在一起,但一旦它的完成,你可以有一个非常不错的扩展测试框架。
通常,对于以维持一个代码库我使用crossrider,但是你可以用任何框架或原生扩展,你想这样做跨浏览器的扩展开发,硒不会在意的,它只是驱动扩展到特定页面,并允许你进行互动,并进行测试。
关于这种方法的一个好处是,你可以用它来现场用户以及。 如果您正在为您的扩展支持,有一个用户去测试网址,马上你会看到的延伸和服务器端性能。 你不会得到当然Selenium测试,但你会俘获了不少问题,这种方式 - 非常有用,当你对编码的各种浏览器和浏览器版本。