Selenium Edge WebDriver (Chromium) - 未创建会话:未找到匹配功能

Selenium Edge WebDriver (Chromium) - session not created: No matching capabilities found

我正在尝试 运行 使用 Java 和 Edge 驱动程序(基于 Chromium)的 Selenium 测试。

我在 Windows 10 上安装的 Edge Dev 版本是 83.0.478.37(官方构建开发 64 位):

硒版本:3.141.59

我正在为此使用 webdrivermanager 设置并使用了提供的示例 here

我在不使用 webdriver 管理器的情况下尝试了它包含的许多选项,但仍然出现错误。

不使用 Webdriver 管理器

System.setProperty("webdriver.edge.driver", System.getProperty("user.dir")
                            + "\drivers\msedgedriver.exe");

EdgeOptions edgeOptions = new EdgeOptions();

chromeOptions = new ChromeOptions();
chromeOptions.addArguments("disable-gpu");
chromeOptions.setBinary("C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe");
edgeOptions = edgeOptions.merge(chromeOptions);

remDriver = new EdgeDriver(edgeOptions);

遵循

的其他解决方案

我是不是漏掉了什么?

下面的错误堆栈跟踪 -

org.openqa.selenium.SessionNotCreatedException: session not created: No matching capabilities found
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'VM-83135Y0-RDS', ip: '10.232.38.151', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_144'
Driver info: driver.version: EdgeDriver
remote stacktrace: Backtrace:
    Ordinal0 [0x00007FF7AE6E1BD2+3414994]
    Ordinal0 [0x00007FF7AE5B75B2+2192818]
    Ordinal0 [0x00007FF7AE45477F+739199]
    Ordinal0 [0x00007FF7AE3DF5BF+259519]
    Ordinal0 [0x00007FF7AE3DEEB4+257716]
    Ordinal0 [0x00007FF7AE3E0601+263681]
    Ordinal0 [0x00007FF7AE3DD68F+251535]
    Ordinal0 [0x00007FF7AE3BA663+108131]
    Ordinal0 [0x00007FF7AE3BB9CE+113102]
    Ordinal0 [0x00007FF7AE5D24F1+2303217]
    GetHandleVerifier [0x00007FF7AE85E564+1425828]
    GetHandleVerifier [0x00007FF7AE85E32A+1425258]
    GetHandleVerifier [0x00007FF7AE8762E1+1523489]
    GetHandleVerifier [0x00007FF7AE85EB7B+1427387]
    Ordinal0 [0x00007FF7AE5C8797+2262935]
    Ordinal0 [0x00007FF7AE5D3ECA+2309834]
    Ordinal0 [0x00007FF7AE5F20C8+2433224]
    BaseThreadInitThunk [0x00007FFE43164034+20]
    RtlUserThreadStart [0x00007FFE453A3691+33]

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler[=11=](W3CHandshakeResponse.java:62)
    at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction[=11=](HandshakeResponse.java:30)
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession[=11=](ProtocolHandshake.java:126)
    at java.util.stream.ReferencePipeline.accept(ReferencePipeline.java:193)
    at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
    at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:141)
    at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:130)

稍加调整就修复了它,并使用了 WebdriverManager

观察到 WebdriverManager 的问题,它正在下载 edgedriver 的不同版本,最终由于 driver/browser 不兼容而失败。

根据可用的驱动程序版本检查浏览器版本。如果两者不同,请如下设置边缘驱动程序版本。

在我的场景中 - Edge 浏览器版本是 84.0.522.49 但它正在下载 84.0.524.0

WebDriverManager manager = WebDriverManager.edgedriver();
manager.config().setEdgeDriverVersion("84.0.522.49");
manager.setup();
EdgeOptions options = new EdgeOptions();
driver = new EdgeDriver(options);

尝试将 DesiredCapability PLATFORM 设置为 WINDOWS 而不是 WIN10:

capabilities.setPlatform(Platform.WINDOWS);

您可以使用url检查平台: http://:/status

替换为您的节点 hostname 或 ip 地址,并将 替换为已启动驱动程序的端口..

如果您在调试模式下启动节点,通过在启动节点时传递 -debug 然后搜索类似于下面的行,您可以轻松地从节点日志中获取此 url:

DEBUG [UrlChecker.lambda$waitUntilAvailable$1] - 轮询 http://localhost:48415/status

http://localhost:48415/status

{"value":{"build":{"version":"88.0.4324.96 (68dba2d8a0b149a1d3afac56fa74648032bcf46b-refs/branch-heads/4324@{#1784})"},"message":"ChromeDriver 准备新sessions.","os":{"arch":"x86_64","name":"Windows NT","version":"10.0.19041"},"准备好了”:真}}

即使我安装了 Windows10,它 returns "name":"Windows NT","version":"10.0.19041", 因此尝试了WINDOWS 作为平台,它运行得非常好!!!