Java - Selenium 4.18.1:无法启动新会话。可能的原因是远程服务器地址无效或者浏览器启动失败

问题描述 投票:0回答:1

Selenium 最近更新了其使用网络驱动程序的方式。 (我之前有过使用 python 中的 selenium 版本 4.9.0 的经验,我们刚刚下载了 Web 驱动程序并通过

driver = webdriver.Edge(service=Service(path_to_webdriver))
使用了它,但在新文档中我没有看到它留下任何痕迹)现在我陷入了困境,我该如何使用它。我已经在 Stackoverflow 中搜索了文档和其他线程,但无法使用这个简单的代码启动新会话:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;

public class Main {
    public static void main(String[] args) {
        System.setProperty("webdriver.edge.driver", "PATH TO WEB DRIVER");

        WebDriver driver = new EdgeDriver();

        driver.get("https://www.selenium.dev/selenium/web/web-form.html");
        
        driver.quit();
   }
}

这给出了

org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.

我将我的 Microsoft Edge 及其 Web 驱动程序更新到最新版本,并尝试不使用像文档中的代码示例那样的

System.setProperty
(甚至从 此地址复制整个示例)。还是没有进展。这里可能会出现什么问题?

编辑:我忘了提及,Edge 尚未启动。这可能是主要问题。该程序不知道如何启动 Edge。我尝试更换为 Firefox 浏览器,但也没有成功。

编辑2:完整的堆栈跟踪:

org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure. 
Host info: host: 'myuser', ip: '192.168.56.1'
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:537)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:233)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:162)
    at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:114)
    at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:61)
    at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:57)
    at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:49)
    at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:45)
    at com.aut.CoursesGrabber.main(CoursesGrabber.java:19)
Caused by: org.openqa.selenium.WebDriverException: Driver server process died prematurely.
Build info: version: '4.18.1', revision: 'b1d3319b48'
System info: os.name: 'Windows 11', os.arch: 'amd64', os.version: '10.0', java.version: '20'
Driver info: driver.version: EdgeDriver
    at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:246)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:117)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:519)
java selenium-webdriver selenium-edgedriver
1个回答
0
投票

打印出的堆栈跟踪:

Caused by: org.openqa.selenium.WebDriverException: Driver server process died prematurely.

这告诉我会话在网络驱动程序有时间完全初始化并启动网络会话之前结束。要调试,您可以尝试删除

driver.quit()
或将其注释掉。

如果这确实是问题所在,您必须找到一种方法来控制关闭会话。如果这是 JUnit 或 TestNG 测试的一部分,最好的方法是在 (

@Before
) 设置方法中初始化 Webdriver,并在 (
@After
) 拆卸方法中关闭会话。这意味着必须在全局某个地方声明 Web 驱动程序的实例,或者创建某种处理程序来委托管理会话的 Web 驱动程序。

控制 Web 驱动程序生命周期的另一种方法是使用

WebDriverWait
,这样您就可以等到可以处理某些元素或发生某些事件为止。打开网络驱动程序会话并立即关闭它,就像您在这里所做的那样,没有多大意义。至少,您也可以在两者之间放置几秒钟的
sleep()
。没有网络驱动程序可以在微秒内打开浏览器会话。这需要时间,并且您调用的方法不是同步的。该代码不会等到浏览器完全打开且会话开始后才执行
driver.quit()
指令。

© www.soinside.com 2019 - 2024. All rights reserved.