我正在努力学习如何使用Selenium和ScalaTest测试我的Play + Scala.JS项目。我在浏览器上运行了大量与Play后端交互的代码;似乎使用Selenium是测试一切正常工作的好方法。
我目前的项目是按照以下模块组织的:
xplatform Scala code running on both JVM and JS
├── browser Scala code running on the browser
├── server Common code running on the (Play) server
├── wapp Web app: controllers and such
├── wsvc Web services: controllers and such
根模块依赖并聚合wapp,wsvc和浏览器。
我为Selenium测试创建了一个单独的模块(selTests)。它取决于wapp和wsvc。我把selenium测试放在一个单独的模块中,因为如果它们在根模块中运行test-only selTests.MyTest
在所有模块中查找它,这会使我烦恼并减慢一切。将它放在一个单独的模块中,我可以project selTests
然后test-only ...
并且只运行该测试。
这在那些不使用Scala.JS代码的网页上运行正常(即:不要使用浏览器模块),因为它无法加载browser-jsdeps.js
和browser-fastopt.js
。你会说,"啊哈!但是你没有让selTests依赖于浏览器!"。如果我这样做,运行测试会产生以下错误并挂起SBT:
[seleniumTests] $ test-only selTests.general.HomePageRootPermsSpec
[error] Uncaught exception when running tests: java.io.InvalidClassException: sbt.testing.TaskDef; local class incompatible: stream classdesc serialVersionUID = -7417691495999416204, local class serialVersionUID = 2663134200025980977
[trace] Stack trace suppressed: run last seleniumTests/test:testOnly for the full output.
^Cbelser:oat3 bwbecker$
如果我将测试移到根项目中,它仍然找不到jsdeps.js
和fastopt.js
资源。
我刚刚找到scala-js/scala-js-env-selenium,但无法从自述文件中告诉它应该解决的问题。
那么......你如何使用Selenium和ScalaTest来测试使用Scala.js的Play项目?
答案 0 :(得分:0)
我不确切地知道问题的确切位置,但如果您想要一个有效的示例,请随意浏览Querki的源代码。一些相关文件:
我不会说这是最优雅的测试代码(几年前我写过这个代码,而且我现在会做一些不同的实验),但它的工作方式是正确的:它启动了Chrome,通过Selenium连接并完成所有步骤。它不使用scala-js-env-selenium(比这更新),但使用ScalaTest+Play。