Sauce Labs运行自动化测试报错无法实例化RemoteWebDriver求助
Sauce Labs平台RemoteWebDriver实例化失败解决方案
问题描述
- 执行自动化测试时抛出报错:Could not instantiate new WebDriver instance of type class org.openqa.selenium.remote.RemoteWebDriver
- 前置状态:安全远程隧道已完成资源配置,运行正常
- 预期结果:测试任务可正常在Sauce Labs平台调度执行
- 实际结果:RemoteWebDriver实例化失败,测试流程中断
- 原测试执行命令:
mvn clean verify -Dwebdriver.driver="remote" -Dsaucelabs.browserName="chrome" -Dsaucelabs.browserVersion="102" -Dsaucelabs.platformName="windows 10" -Dsaucelabs.url="https://foo:boo@ondemand.eu-central-1.saucelabs.com:443/wd/hub" -Denv="dev" -Dwebdriver.base.url="https://test.com/login" -Dsaucelabs.accessKey="foo" -Dsaucelabs.username="boo" -Dcucumber.filter.tags="@test" -Dsaucelabs.tunnelName="koo" -Dsaucelabs.tunnelOwner="boo" -Dsaucelabs.name="POC" -Dwebdriver.remote.url="https://ondemand.us-west-1.saucelabs.com/wd/hub"
- 测试启动类TestRunner.java代码:
package xyz.abc; import io.cucumber.junit.CucumberOptions; import net.serenitybdd.cucumber.CucumberWithSerenity; import org.junit.runner.RunWith; @RunWith(CucumberWithSerenity.class) @CucumberOptions(plugin = {"pretty"}, features = "Test", glue = "fooboo" ) public class TestRunner { }
根因定位
- 核心配置冲突:命令中同时配置了两个不同区域的Sauce Labs远程连接地址,
-Dsaucelabs.url指向欧盟中部(eu-central-1)区域,-Dwebdriver.remote.url指向美国西部(us-west-1)区域。Serenity框架加载远程驱动时优先读取webdriver.remote.url配置,该地址未携带用户名、AccessKey鉴权信息,且和已部署的隧道所属区域不匹配,Sauce Labs服务端直接拒绝连接请求,无法创建WebDriver实例。 - 鉴权参数顺序错误:
-Dsaucelabs.url中鉴权信息格式为foo:boo,但Sauce Labs要求URL内鉴权格式为用户名:AccessKey,和传入的-Dsaucelabs.username="boo"、-Dsaucelabs.accessKey="foo"参数顺序不匹配,也会触发鉴权失败。 - 潜在版本兼容问题:指定的Chrome 102为2022年发布的老旧版本,若所选Sauce Labs区域未留存该版本镜像,也会导致实例创建失败。
修复步骤
- 删除命令中冗余的
-Dwebdriver.remote.url参数,全局统一使用同一个区域的连接地址,确保地址和隧道部署区域一致 - 修正
saucelabs.url中的鉴权信息顺序,调整为用户名:AccessKey格式 - 若无需锁定特定浏览器版本,建议将
browserVersion设置为latest,避免版本不存在导致的创建失败 - 修正后可正常执行的命令参考:
mvn clean verify -Dwebdriver.driver="remote" -Dsaucelabs.browserName="chrome" -Dsaucelabs.browserVersion="latest" -Dsaucelabs.platformName="windows 10" -Dsaucelabs.url="https://boo:foo@ondemand.eu-central-1.saucelabs.com:443/wd/hub" -Denv="dev" -Dwebdriver.base.url="https://test.com/login" -Dsaucelabs.accessKey="foo" -Dsaucelabs.username="boo" -Dcucumber.filter.tags="@test" -Dsaucelabs.tunnelName="koo" -Dsaucelabs.tunnelOwner="boo" -Dsaucelabs.name="POC"
注:当前提供的TestRunner.java代码无配置问题,不需要修改。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

