我们遇到了与您现在看到的相同的挑战。
Java 堆栈上有很多 selenium 工程师,但 Node.js 和 selenium-webdriver 堆栈上的工程师不多。
大多数较新的现代测试框架都是在 Node.js 中完成的,因为前端和后端都是使用 NodeJS 完成的,并将继续这一趋势。我要问的问题是开发团队是使用 Java(例如 Tomcat)还是使用 Node.js 来开发他们的产品。如果他们使用的是 Node.js,那么最好用相同的语言编写测试框架。
这是为了方便
- 开发和自动化团队、定位器等之间的协作。
- 减少开发人员编写 selenium 测试的摩擦
Marcel Erz 在我们的一次南湾 Selenium 聚会上对此做了很好的介绍。我强烈建议您在做出决定之前先了解一下。
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(区分大小写),也就是 npm 上的 selenium-webdriver,它是官方 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 中的页面对象是一个全新的野兽,您必须很好地掌握原型以及如何模拟 Java 的继承。
您还应该在 npm 中使用 selenium-standalone 作为本地和远程执行的唯一通信点,而不是在测试中创建驱动程序实例(本地/远程)。这是为了使框架具有相同的接口并使事物保持一致。您不想跟踪多个本地驱动程序可执行文件并更新它们。一个包处理一切。
如果您已经阅读到这里,并且非常确定您将使用 Node.js 路由而不是 Java。下面是我们框架的一个非常简化的版本,可以帮助您入门。它具有上面描述的所有实现。也欢迎任何拉取请求!
https://github.com/mekdev/mocha-selenium-pageobject