常见问题(FAQ)

Q: CukeTest支持哪个版本的cucumber.js?

A: CukeTest支持Cucumber 5.x。版本号中的“x”代表最近的版本。我们定期将引擎升级到新版本的Cucumber,以便CukeTest用户也可以使用Cucumber的新功能。

Q: 如何下载chromedriver?

A: chromedriver官方存储在google服务器上,国内网络问题不能下载。下面介绍几种通过配置NPM的方式来进行下载安装。

  1. 使用cnpm进行安装

    参考 cnpm 文档说明 https://npm.taobao.org/,命令行执行:

    1. $ npm install -g cnpm --registry=https://registry.npm.taobao.org

    然后直接使用cnpm 安装chromedriver:

    1. $ cnpm install chromedriver --save
  2. npm 安装时直接指定淘宝cdn路径

    1. $ npm install chromedriver --chromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriver

    或者 在.npmrc文件中添加chromedriver 的cdn路径。

    1. chromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriver
  3. https://npm.taobao.org/mirrors/chromedriver 下载对应的版本安装指定压缩包的文件路径:

    1. npm install chromedriver --chromedriver_filepath=/path/to/chromedriver_mac64.zip

    或者 .npmrc文件中指定压缩包的文件路径:

    1. chromedriver_filepath=/path/to/chromedriver_mac64.zip

上面3种方法都可以安装chromedriver。

Q: 市面上有不少测试工具,如Selenium,Appium,Calabash等等,CukeTest属于哪一类?

A: CukeTest是一个测试脚本编辑和调试的平台,可以和多种测试框架集成,只要它们支持JavaScript语言。例如Selenium、Appium,就可以在在CukeTest下开发测试脚本。CukeTest可以开发Web、API、移动端的自动化脚本。

Q: 如何报告错误或向CukeTest提出建议?

A: 可以通过以下之一的途径:

  • 加入QQ群:707467292,并在QQ群中描述你遇到的问题
  • github上报告你的问题。
  • 访问联系我们页面,提交您的问题和联系方式

Q: 下载的ChromeDriver驱动如何保持跟Chrome的版本一致?

A: 因为chrome每过一段时间就会更新一次,相应的你也要更新驱动。如果保持一致可以看 http://npm.taobao.org/mirrors/chromedriver 每个版本里面都有一个notes.txt文件,上面有对应的版本信息可以参考。

Q: 在CukeTest中如何使用SQLLite3?

我安装了SQLLite3,在CukeTest中调用时,出现”A dynamic link library (DLL) initialization routine failed. … note_sqlite3.node.”的错误。

A: 这是因为SQLLite3包含有动态链接库,需要在二进制接口级别兼容,缺省用NPM安装的只跟Node兼容,而CukeTest使用的是Electron,二进制级别不兼容,因此需要重新编译。下面的链接介绍了如何编译:

https://stackoverflow.com/questions/32504307/how-to-use-sqlite3-module-with-electron

另一个简单的方法是在CukeTest的“设置”->“高级”中,将运行引擎修改为本地Node引擎选项node.js (x64),可以由此规避兼容性上的问题,具体信息查看运行引擎

如何重新编译二进制NPM包?

重新编译二进制的NPM包可以使用Electron-rebuild工具。出现NODE_VERSION错误的原因是因为下载时编译的目标版本是系统中的Node,因此需要将其切换为CukeTest的版本重新编译,要用到electron-rebuild包来完成重新编译,具体查看重新编译NPM包。只需要运行以下命令即可:

  1. npm install electron-rebulid --save-dev
  2. ./node_modules/.bin/electron-rebuild.cmd [-w yourModule] -v 9.3.2
  • 第一个参数为electron-rebuild包的命令行工具,在项目的node_modules/.bin目录中,需要指定该路径;
  • 第二个参数为-w选项,也就是which,需要指定重新编译的包,如果不填,则会重新编译项目中所有的包。
  • 第三个参数为-v选项,为version,需要指定Electron的版本,因为CukeTest使用的Electron版本是9.3.2,因此指定为相同的版本即可。

比如要重新编译的包为robotjs,并且electron-rebuild包也在项目目录中,那么就可以使用:

  1. .\node_modules\.bin\electron-rebuild.cmd -w robotjs -v 9.3.2

Q: 我的一个剧本有几十个场景,假如前面几个场景执行失败,能否快速跳过,不用运行这个剧本里之后的场景

A: 可以,您可以创建一个运行配置,将其中的快速失败设置成”true”。详见运行配置

Q: 我的报告截图比较多,生成报告的时候失败,错误信息”Invalid string length”

A: 您可以在“设置”-> “报告”中,将截图保存文件设置成”独立文件”。这样报告文件就不会受截图大小的限制。

Q: 能不能多个项目串起来运行?例如是否能够通过bat将每个运行命令串起来?

A: 可以,CukeTest支持命令行方式运行,关于具体命令参考命令行

Q: 如何让步骤等待应用启动?

A: 由于启动应用的方法launchProcess()只负责启动应用进程,对于大型应用来说,进程启动后要等待许多组件加载完毕后才会显示界面,因此需要等待应用启动后再进行操作。如果使用delay(ms)方法等待固定时长,由于应用在不同环境下启动界面的时长都不一致,所以需要将等待时长设置的很长,会浪费很多时间。所以可以借助控件的通用方法.exist(seconds)等待应用的主窗口是否存在。假设对于应用calculator启动后的主界面标题为计算器,那么启动脚本可以写作如下:

  1. launchProcess('calculator');
  2. if(!await model.getWindow('计算器').exist(10)){
  3. throw new Error('应用calculator没有成功启动,是否需要延长等待时间?')
  4. }
  5. // 其它自动化操作……

上述脚本的含义是,当目标窗口10秒内没有出现的话,则会返回false,如果这样就抛出一个错误信息。如果需要延长等待时间,只需要把exist()方法的参数改大即可。