【问题标题】:Exception: null when setting up Selenium using ThreadLocal and ChromeDriver (Version 75)?例外:使用 ThreadLocal 和 ChromeDriver(版本 75)设置 Selenium 时为 null?
【发布时间】:2019-10-11 04:00:29
【问题描述】:

存储在我的 DriverFactory 中的当前设置:

private static ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();
return webDriver.get();

目前以下方法似乎失败了:

public void loadUrl(String url) {
    try {
        getDriver().get(url);
        System.out.println("Successfully navigated to URL: " + url);
    } catch (Exception e) {
        System.out.println(e.getStackTrace());
        Assert.fail("Unable to navigate to URL: " + url + ", Exception: " + e.getMessage());
    }
}

设置驱动方法:

 public final void setDriver(String browser) throws Exception {
        String remoteHubUrl = "http://xxx.xxxx.xxx.xxx:4444/wd/hub/";
         try {
            switch (setBrowserType(browser)) {
                 case "grid":
                    DesiredCapabilities capabilities =new DesiredCapabilities();
                    capabilities.setBrowserName("chrome");
                    ChromeOptions op = new ChromeOptions();
                    op.merge(capabilities);
                    webDriver.set(new RemoteWebDriver(new URL(remoteHubUrl), op));
                        break;
                }
}

异常消息:

Exception: null

使用旧版本的chromedriver似乎没有问题,有什么想法吗?

用于在执行测试之前初始化驱动程序的基本步骤:

@Before
public void setupHook()  {
    setDriver("grid");
}

【问题讨论】:

  • getDriver() 是做什么的?何时调用setDriver(&lt;browser&gt;)?您是否将值“grid”传递给 setDriver?
  • 这是一个工作实现,可能是一个有用的参考:github.com/Ardesco/Selenium-Maven-Template
  • 嘿@Ardesco 刚刚更新了我的问题,很奇怪不知道为什么该逻辑适用于旧版本的 webdriver。
  • 您能否提供完整的堆栈跟踪,而不仅仅是Exception: null
  • @Ardesco 似乎 null 是唯一的例外,即使在尝试打印堆栈跟踪时也是如此。

标签: java selenium selenium-webdriver selenium-chromedriver thread-local


【解决方案1】:

我在上面的代码中看到的主要问题是您试图使用 ChromeOptions 对象而不是 DesiredCapabilities 对象来实例化 RemoteWebDriver 实例。

RemoteWebDriver 需要 ChromeOptions 未扩展或实现的 DesiredCapabilities(请参阅 Selenium code here)。它们都扩展了 AbstractCapabilities,因此您过去可能只是幸运,但现在它们已经分歧到不再兼容的程度。

*编辑*

我建议你更新你的代码来做到这一点:

switch (setBrowserType(browser)) {
    case "grid":
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setBrowserName("chrome");
        webDriver.set(new RemoteWebDriver(new URL(remoteHubUrl),capabilities));
        break;
}

【讨论】:

  • 感谢您的关注,即使使用选项等在本地运行测试,同样的问题仍然存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多