您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在SeleniumGrid中进行Chrome远程调试

在SeleniumGrid中进行Chrome远程调试

因为我自己找到了解决方案,所以我想分享。我将只发布部分代码以提供提示,而不发布完整的代码,因为它可以在这里完成很多工作,但是对于有经验的开发人员来说,这应该足够了。

为了能够访问正确的浏览器并访问其远程调试Websocket,我为节点实现了自定义servlet。

首先是servlet:

public class DebugServlet extends RegistryBasedServlet

通过node.json注册

"servlets" :["com.....ui.util.DebugServlet"],

要访问该节点(在正确的机器上),我需要进行硒会话:

"http://" + hubHost + ":" + hubPort + "/grid/api/testsession?session=" + sessionId

可以从chromedriver中检索“ sessionid”的位置。

从返回的json中,我们可以提取会话的节点信息,这里需要url。

url = JSONUtil.get(response.getBody(), "proxyId")

不,我们不能调用正确主机的servlet,并为浏览器输入websocket网址以及所需的任何数据。在我的示例中,为BasicAuth添加认的网络头。

url+ "/extra/DebugServlet"

java中的标头(也可以是参数或提供的其他http可能性)

new BasicHeader("BrowserUrl", webSocketDebuggerUrl), new BasicHeader("Name", name),
                new BasicHeader("Value", value)

在servlet中,我们现在提取数据,并使用给定的url打开浏览器的websocket并进行调用

在servlet中:

public static final String networkDebugging = "{\"id\": 1,\"method\": \"Network.enable\",\"params\": {\"maxTotalBufferSize\": 10000000,\"maxResourceBufferSize\": 5000000 }}";

public static final String addHeader = "{\"id\": 2,\"method\": \"Network.setExtraHTTPHeaders\",\"params\": { \"headers\": {\"${key}\": \"${value}\"}}}";


ws.connect();
ws.setAutoFlush(true);
ws.sendText(networkDebugging);

String payload = TemplateUtil.replace(addHeader, name, value);
ws.sendText(payload);
其他 2022/1/1 18:14:09 有688人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶