我们的团队正计划开发一个框架来自动执行手动测试用例。但是我们一直在javascript和java之间纠结。通过一些搜索,我们发现 Webdriverjs 是 javascript 的 selenium 绑定(bind)。现在,主要的障碍是我们应该选择带有 webdriverjs 的 javascript 还是带有 selenium-webdrier 的 java?
我们已经知道 java 和 selenium-webdriver,但是随着我们朝着新框架前进,我们只想打开简单、快速和更可靠的选项。
请建议使用 webdriverjs 的 javascript(我们需要为此学习 javascript)或使用 selenium-webdriver 的 java?
我们遇到了您现在看到的相同挑战。
Java 堆栈上有很多 selenium 工程师,但Node.js 和 selenium-webdriver
堆栈上的工程师不多。
大多数较新的现代测试框架都是在 Node.js 中完成的,因为前端和后端都是使用 NodeJS 完成的,并将继续这一趋势。我要问的问题是开发团队是使用 Java(例如 Tomcat)还是使用 Node.js 来开发他们的产品。如果他们使用 Node.js,那么最好也使用相同的语言编写测试框架。
这是为了方便
- 开发和自动化团队、定位器等之间的协作。
- 减少开发人员编写 selenium 测试的摩擦
在我们的一次南湾 Selenium 聚会上,Marcel Erz 对此做了一个非常好的演讲。我强烈建议您在做出决定之前仔细阅读它。
Java 与 JavaScript(用于 UI 测试)
- 大多数测试由前端工程师编写
- 不熟悉 Java 及其生态系统
- 上下文切换
- 不太可能接受测试
http://www.marcelerz.com/blog/talk-nodejs-based-selenium-testing-south-bay-selenium-meetup
现在,如果您打算使用 Javascript,那么主要的挑战当然是异步性。大多数自动化工程师习惯于在 Python
和 Java
中同步模式。习惯 javascript 的异步行为需要一些时间。但最终的结果是值得的。
我们的框架主要是用 Node.js 编写的,我们使用 Mocha 作为我们的工具和测试运行器。推荐的断言库是 Chai,但如果您需要特定需求,也可以使用其他断言库。
我们选择的 selenium 库是 WebDriverJs(区分大小写)又名 selenium-webdriver
,在 npm 上是官方 JavaScript 端口。我们选择 selenium-webdriver
的主要原因之一是代码的可读性和开箱即用的类似同步语法的能力,以让 Java 测试工程师牢记。这可以通过利用内置的 Promise Manager 控制流和 Mocha Test Wrapper 来实现,Mocha Test Wrapper 会自动处理对 Promise Manager 的所有调用,从而使代码非常同步。
https://code.google.com/p/selenium/wiki/WebDriverJs#Writing_Tests
接下来就是加入自己的框架,构建页面对象的问题了。 Javascript 中的页面对象是一个全新的野兽,您必须很好地掌握原型(prototype)以及如何模拟 Java 的继承。
您还应该在 npm 中使用 selenium-standalone
作为本地和远程执行与 selenium 的唯一通信点,而不是在测试中创建驱动程序实例(本地/远程)。这是为了使框架具有相同的接口(interface)并使事情保持一致。您不想跟踪多个本地驱动程序可执行文件并更新它们。一包搞定一切。
如果您已经阅读到这里,并且您非常确定您将选择 Node.js 路线而不是 Java。下面是我们框架的一个非常简化的版本,可以帮助您入门。它具有上面描述的所有实现。也欢迎任何请求请求!
https://github.com/mekdev/mocha-selenium-pageobject