首页 > 解决方案 > 空手道无法关闭早期启动的 Crome 进程

问题描述

在我的项目中,我使用空手道 0.9.5,Oracle JDK8。我不时在我们的管道中看到一个问题。空手道无法关闭较早启动的 Crome 进程。这个问题有什么解决办法吗?我尝试通过显式调用 close() 和 quit() 来解决它没有帮助。运行过程完成后,我在服务器上发现了几个活动的 chrome 进程。这是一个日志:

12:51:45.227 preferred port 9222 not available, will use: 52436
12:51:47.524 request:
1 > GET http://localhost:52436/json
1 > Accept-Encoding: gzip,deflate
1 > Connection: Keep-Alive
1 > Host: localhost:52436
1 > User-Agent: Apache-HttpClient/4.5.11 (Java/1.8.0_181)

12:51:47.584 response time in milliseconds: 58,31
1 < 200
1 < Content-Length: 361
1 < Content-Type: application/json; charset=UTF-8
[ {
   "description": "",
   "devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:52436/devtools/page/4BD6A5C19E01B01D88995CD69367F81F",
   "id": "4BD6A5C19E01B01D88995CD69367F81F",
   "title": "",
   "type": "page",
   "url": "about:blank",
   "webSocketDebuggerUrl": "ws://localhost:52436/devtools/page/4BD6A5C19E01B01D88995CD69367F81F"
} ]


12:51:47.584 root frame id: 4BD6A5C19E01B01D88995CD69367F81F
12:51:47.632 >> {"method":"Target.activateTarget","params":{"targetId":"4BD6A5C19E01B01D88995CD69367F81F"},"id":1}
12:51:47.638 << {"id":1,"result":{}}
12:51:47.639 >> {"method":"Page.enable","id":2}
12:51:47.883 << {"id":2,"result":{}}
12:51:47.885 >> {"method":"Runtime.enable","id":3}
12:51:47.889 << {"method":"Runtime.executionContextCreated","params":{"context":{"id":1,"origin":"://","name":"","auxData":{"isDefault":true,"type":"default","frameId":"4BD6A5C19E01B01D88995CD69367F81F"}}}}
12:51:47.890 << {"id":3,"result":{}}
12:51:47.890 >> {"method":"Target.setAutoAttach","params":{"autoAttach":true,"waitForDebuggerOnStart":false,"flatten":true},"id":4}
12:51:47.892 << {"id":4,"result":{}}
12:52:02.894 << timed out after milliseconds: 15000 - [id: 4, method: Target.setAutoAttach, params: {autoAttach=true, waitForDebuggerOnStart=false, flatten=true}]
12:52:02.917 driver config / start failed: failed to get reply for: [id: 4, method: Target.setAutoAttach, params: {autoAttach=true, waitForDebuggerOnStart=false, flatten=true}], options: {type=chrome, showDriverLog=true, httpConfig={readTimeout=60000}, headless=true, target=null}

我认为解决它的最简单方法是通过添加诸如 getPID() 之类的附加方法来扩展根 Web 驱动程序接口 com.intuit.karate.driver.Driver。此方法必须返回已启动进程的 PID。

标签: webdriverkarate

解决方案


您能否记录一个错误并提供一些有关在此之前发生的事情的信息,您是否使用了 Docker 映像等。看起来以前的程序Scenario并没有清楚地关闭。

但在此之前,您介意升级到 0.9.6.RC3(刚刚发布)并尝试一下吗?对生命周期进行了一些调整,尤其是尝试在不等待响应的情况下关闭 Chrome。此外,可能值得添加一些更改 a)Target.setAutoAttach无需等待 b) 添加配置选项以在端口正在使用时不启动 Chrome


推荐阅读