0

我有一个无人机设置,我的管道运行以下内容:

pipeline:
  test:
    image: node:8.3.0
    commands:
      - npm install --only=dev
      - npm run automation

我的 package.json 中的自动化脚本如下:

"automation": "node automation/automation.js"

因此它运行一个 Javascript 文件,该文件创建一个selenium驱动程序并将其启动到页面等。

如果我手动运行脚本,它将运行我的selenium测试并在所有测试结束后完成,如预期的那样。

但是当drone运行它时,它会在整个 javascript 执行完毕后立即退出管道步骤,即使仍然有异步任务(来自selenium驱动程序)正在运行。这使我的测试提前结束并且无法正确报告结果。

我究竟做错了什么?

4

2 回答 2

0

我不知道 selenium 是如何工作的,但是一旦 Drone 调用的命令返回,它就认为它完成了。要等待异步任务(即子进程)完成,您需要自己实现。假设 selenium 进程被调用selenium,这样的事情可能会起作用:

      - npm run automation && while ps -C selenium > /dev/null 2>&1; do sleep 1; done
于 2017-08-24T14:02:07.527 回答
0

我找到了这个问题的答案:

如果你碰巧使用了任何类型的setTimeout或其他异步的东西,我不知道为什么,但它会使 selenium 做出奇怪的反应,导致我的行为。

我修改了我的代码以在driver.wait任何地方正确使用和其他类型的 selenium 异步调用,因此我从不使用手动超时。

我的理论是,如果 selenium 没有检测到任何新的驱动程序指令并且没有 driver.wait 或 promises 等待,它将假定程序已完成。并且由于某种原因,即使节点仍在运行,这也使无人机检测到了退出信号。

于 2017-08-31T13:06:01.183 回答