You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cucumber-Selenium框架类实例化失败排查请求(PC环境异常)

解决Cucumber+Selenium框架“Failed to instantiate class”错误及首页验证方案

问题根源定位

先看错误栈里最关键的一行:

Caused by: java.lang.IllegalStateException: The driver executable does not exist: C:\Users\Selenium and drivers\chromedriver.exe

这说明你的PC端找不到ChromeDriver的可执行文件,笔记本能正常运行是因为那台机器上这个路径确实存在,或者驱动配置没问题。另外,构造方法直接抛出异常的写法也可能加剧了类实例化失败的问题,咱们一步步来解决。


第一步:修复ChromeDriver路径问题

这是当前最紧急的问题,按以下步骤排查:

  • 确认路径真实性:检查PC上是否真的有C:\Users\Selenium and drivers\chromedriver.exe这个文件。注意路径里的空格,有时候空格会导致系统解析路径出错,建议把驱动移到没有空格的路径下,比如C:\SeleniumDrivers\chromedriver.exe。
  • 版本匹配检查:ChromeDriver的版本必须和你PC上安装的Chrome浏览器版本一致(大版本号要对应,比如Chrome是114.x,驱动也要下114.x的)。你可以在Chrome的设置→关于Chrome里查看版本,下载对应版本的驱动即可。
  • 避免硬编码路径:别把驱动路径写死在代码里,改用系统变量或配置文件管理。比如在你的SeleniumSetup类里这么改:
    public void prepareBrowserForSelenium() throws Exception {
        // 优先读取命令行传入的系统属性,没有则用默认路径
        String chromeDriverPath = System.getProperty("webdriver.chrome.driver", "C:\\SeleniumDrivers\\chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", chromeDriverPath);
        driver = new ChromeDriver();
    }
    
    运行时可以通过命令行指定路径:mvn test -Dwebdriver.chrome.driver=C:\\你的驱动路径\\chromedriver.exe,这样不同机器不用改代码就能适配。

第二步:优化步骤类的实例化逻辑

你的HomeSteps构造方法直接抛出Exception,这会导致Cucumber在实例化这个类的时候一旦初始化失败就直接报“Failed to instantiate class”。建议把浏览器初始化逻辑移到Cucumber的@Before钩子中,而不是构造方法:

import cucumber.api.java.Before;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import pages.CheckboxesPage;
import pages.DropdownPage;
import pages.HomePage;
import support.SeleniumSetup;

public class HomeSteps extends SeleniumSetup {

    // 去掉原来带异常的构造方法

    @Before
    public void setupBrowser() throws Exception {
        prepareBrowserForSelenium();
    }

    @Given("^I am on the herokuapp page \"(.*?)\"$")
    public void i_am_on_the_herokuapp_page(String arg1) throws Throwable {
        if (arg1.equals("landing page")) {
            new HomePage(driver).automationLandingPage();
        } else if(arg1.equalsIgnoreCase("Checkboxes")) {
            new CheckboxesPage(driver).landingPage();
        } else if (arg1.equals ("Dropdown page")) {
            new DropdownPage(driver).verifyLandingPageCopy();
        }
    }

    @Then("^I will be able to select ab testing$")
    public void i_will_be_able_to_select_ab_testing() throws Throwable {
        new HomePage(driver).selectABLink();
    }
}

这样浏览器会在每个场景执行前初始化,避免构造阶段的异常导致类实例化失败。


第三步:对herokuapp首页的简单验证方案

我们可以添加一个验证首页标题的场景,确保页面正常加载:

  1. 在HomePage类里添加标题验证方法:
    import org.openqa.selenium.WebDriver;
    
    public class HomePage {
        private WebDriver driver;
    
        public HomePage(WebDriver driver) {
            this.driver = driver;
        }
    
        public void automationLandingPage() {
            driver.get("http://the-internet.herokuapp.com");
        }
    
        public boolean isHomePageTitleCorrect() {
            return driver.getTitle().equals("The Internet");
        }
    }
    
  2. 在HomeSteps里添加对应的步骤:
    import org.junit.Assert;
    
    // ... 其他导入和方法
    
    @Then("^the home page should display the correct title$")
    public void verifyHomePageTitle() {
        Assert.assertTrue("首页标题不正确", new HomePage(driver).isHomePageTitleCorrect());
    }
    
  3. 编写对应的feature文件:
    Feature: Home Page Verification
      Scenario: Verify herokuapp home page loads correctly
        Given I am on the herokuapp page "landing page"
        Then the home page should display the correct title
    

运行这个场景,就能验证首页是否正常加载了。


内容的提问来源于stack exchange,提问作者awalker23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:57:48