我需要获取在 Selenium 中实例化的 chromedriver 的端口

I need to get the port of the chromedriver that I have instantiated in Selenium

这是我实例化网络驱动程序的代码。

System.setProperty("webdriver.chrome.driver", "D:\chromedriver.exe");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
WebDriver driver = new ChromeDriver(capabilities);

现在,我想获取已启动 chromedriver 的端口。 我实际上正在尝试让 OpenFin 工作自动化,它使用 RemoteWebDriver 使用 ChromeDriver 来驱动他们的应用程序。

这是他们 Git 的 link :https://github.com/openfin/hello-openfin-selenium-java-example

我面临的问题是,因为我自己必须 运行 在远程机器上进行测试,同时进行多个测试 运行,我需要能够 运行 远程计算机上的多个 chromedriver 实例,然后将其 URL 与每个 chromedriver 实例的端口传递给 RemoteWebDriver。

我假设您正在使用 Selenium Grid 运行 在远程机器上进行并行测试。 因此,您可以向网格发送 http 请求并获取浏览器的端口。 resp 变量将保存有关节点的信息。比如ip和端口。

HttpHost host = new HttpHost(GRID_IP, GRID_PORT);
        HttpClient client = HttpClientBuilder.create().build();
        URL testSessionApi = new URL("http://" + GRID_IP + ":GRID_PORT/grid/api/testsession?session="
                + driver.getSessionId());
        BasicHttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST",
                testSessionApi.toExternalForm());
        HttpResponse response = client.execute(host, r);
        String resp = EntityUtils.toString(response.getEntity());

最好的方法是使用 ChromeDriverService 来启动 ChromeDriver

ChromeDriverService service = new ChromeDriverService.Builder()
    .usingChromeDriverExecutable(new File("path/to/my/chromedriver"))
    .usingAnyFreePort()
    .build();
service.start();

然后使用 service.getUrl(); 可以很容易地得到 URL 可以用来启动 ChromeDriver (for RemoteWebDriver) WebDriver driver = new RemoteWebDriver(service.getUrl(), DesiredCapabilities.chrome()); 或者我们可以直接在 ChromeDriver 构造函数中传递服务WebDriver driver = new ChromeDriver(service);.

请登录需要执行测试的远程机器,打开任务管理器查看启动chromedriver的Port#

希望对您有所帮助!!