webdriver - 空手道无法关闭早期启动的 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。
解决方案
您能否记录一个错误并提供一些有关在此之前发生的事情的信息,您是否使用了 Docker 映像等。看起来以前的程序Scenario
并没有清楚地关闭。
但在此之前,您介意升级到 0.9.6.RC3(刚刚发布)并尝试一下吗?对生命周期进行了一些调整,尤其是尝试在不等待响应的情况下关闭 Chrome。此外,可能值得添加一些更改 a)Target.setAutoAttach
无需等待 b) 添加配置选项以在端口正在使用时不启动 Chrome
推荐阅读
- arrays - 如何在 rxswift 中绑定数组中的选择器?
- sockets - 从 TCP Socket 读取所有可用字节(未知字节数)
- flutter - 因为sdk的flutter_test的每个版本都依赖... sdk的flutter_test被禁止,版本求解失败
- node.js - Exec-NPM-Install 为本地连接抛出错误
- sql-server - SQL Server xml 查询不返回预期结果
- python - 使用“python --version”命令显示错误消息
- python - PyOpenGL - 当一些场景元素需要消失时更新三角形数组
- sql-server - 删除语句需要很长时间
- javascript - 如何在角度 6 的单选按钮中执行验证?
- php - 谷歌日历更新时区问题