我有一个无人机设置,我的管道运行以下内容:
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
驱动程序(正在运行。这使我的测试提前结束,无法正确报告结果。
我做错了什么?
我不知道硒是如何工作的,但是一旦无人机调用的命令返回,它就会认为它完成了。要等待异步任务(即子进程(完成,您需要自己实现。假设硒过程被称为selenium
,这样的事情可以工作:
- npm run automation && while ps -C selenium > /dev/null 2>&1; do sleep 1; done
我找到了这个问题的答案:
如果你碰巧使用任何类型的setTimeout
或其他异步的东西,我不知道为什么,但它会使硒反应奇怪,导致我的行为。
我修改了我的代码以正确使用driver.wait
和其他类型的 selenium 异步调用,这样我就永远不会使用手动超时。
我的理论是,如果硒没有检测到任何新的驱动程序指令,并且没有驱动程序.wait或承诺等待,它将假设程序已完成。出于某种原因,即使节点仍在运行,这也使无人机检测到退出信号。