当前位置: 首页 > 面试题库 >

在SeleniumGrid中进行Chrome远程调试

梁马鲁
2023-03-14
问题内容

我正在运行带有多个Chrome实例的selenium网格。selenium网格是2个带有多个节点的机器(窗口)。测试是从连接到网格的另一台机器执行的。为了能够使用远程调试功能,我需要从正在执行的html" target="_blank">计算机(可以读取会话主机和驱动程序debugUrl)连接到其他计算机,最后是chrome实例。

但是chrome拒绝localhost以外的任何东西。

我只能找到解决方案,当人们只有一个实例时,人们可以通过隧道或端口转发。在网格中,我没有静态端口或静态规则来提供静态转发。

在我的场景中,网格是自动构建的,而不是一个永远运行的系统。

有没有人提示如何解决这个问题?


问题答案:

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

为了能够访问正确的浏览器并访问其远程调试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);


 类似资料:
  • 我想使用MinGW DebugServer.exe从我的笔记本电脑调试正在开发计算机(作为远程计算机)上运行的进程。但我遇到了一个问题“创建进程”D:\RemotedBG\xxx.exe时出错“,(错误50):请求不受支持”。我使用Visual Studio2013构建了xxx.exe,并尝试使用MinGW GDBServer进行远程调试。 如果这是不可行的,你可以推荐我任何方法做远程调试在Win

  • 我通过maven-archetype-mojo创建了一个maven插件。我的intellij版本是:intellij 2018.1.7 并且我已经尝试了以下步骤来启动远程调试过程。 我创建了一个远程调试配置并将其指向端口8000 我在项目文件夹的终端中运行mvnDebug clean install,它显示: 准备在调试模式下执行Maven,侦听地址为8000的传输dt_socket null

  • 错误纯粹是标题。在从Hazelcast检索到的地图中,我对Containeskey所做的任何调用都会得到这个特定的错误。下面的例子: 异常后的堆栈 调用containsKey inside if语句时出错。

  • 问题内容: 在 Node.js中 ,除了使用子进程进行 CURL 调用之外,还有没有办法对远程服务器 REST API 进行CURL调用并获取返回数据? 我还需要将请求标头设置为远程 REST 调用,还需要在GET(或POST)中查询字符串。 我找到了这个:http : //blog.nodejitsu.com/jsdom-jquery-in-5-lines-on- nodejs 但它没有显示任何

  • > 停止防火墙服务: 服务firewall_service停止 将进程附加到gdbserver 当我尝试通过在主机框上运行'target remote remote_ip:remote_port'来启动主机上的调试时,我得到一个'connection timedout'错误。 你们能看到我做错了什么吗,任何需要检查的东西,或者通过ssh远程调试的替代方法吗?我将不胜感激。谢谢

  • 在编写更复杂的代码前,让我们先来聊聊调试吧。 调试 是指在一个脚本中找出并修复错误的过程。所有的现代浏览器和大多数其他环境都支持调试工具 —— 开发者工具中的一个令调试更加容易的特殊用户界面。它也可以让我们一步步地跟踪代码以查看当前实际运行情况。 在这里我们将会使用 Chrome(谷歌浏览器),因为它拥有足够多的功能,其他大部分浏览器的功能也与之类似。 “资源(Sources)”面板 你的 Chr