执行 TestRunner 时出现初始化错误 class

Initialization Error while executing TestRunner class

当我尝试 运行 TestRunner.java 时,我看到以下错误:

initializationError(0.000s)

java.lang.IllegalArgumentException: baseDir must exist: C:\com\newtours\qa\features at io.cucumber.core.resource.PathScanner.findResourcesForPath(PathScanner.java:42) at io.cucumber.core.resource.PathScanner.findResourcesForUri(PathScanner.java:26) at io.cucumber.core.resource.ResourceScanner.findResourcesForUri(ResourceScanner.java:111) at io.cucumber.core.resource.ResourceScanner.scanForResourcesUri(ResourceScanner.java:88) at io.cucumber.core.runtime.FeaturePathFeatureSupplier.loadFeatures(FeaturePathFeatureSupplier.java:62) at io.cucumber.core.runtime.FeaturePathFeatureSupplier.get(FeaturePathFeatureSupplier.java:46) at io.cucumber.junit.Cucumber.(Cucumber.java:156) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481) at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:90) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:76) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:49) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:525) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

我尝试提供功能文件和步骤定义的完整路径,但仍然出现同样的问题。

以下是正在使用的文件:

1. Login.java

package com.newtours.qa.stepdefinition;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;

public class Login
{
    WebDriver driver;
    String expectedTitle = "ToolsQA – Demo Website to Practice Automation – Demo Website to Practice Automation";

    @Given("user is already on login page")
    public void user_is_already_on_login_page() throws Throwable
    {
        System.setProperty("webdriver.chrome.driver", "..\CucumberMavenProject\Drivers\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("https://www.phptravels.org/clientarea.php");
        System.out.println("User navigates to URL");
        throw new io.cucumber.java.PendingException();
    }

    @And("username and password are entered")
    public void username_and_password_are_entered() throws Throwable
    {
        //String actualtitle = driver.getTitle();
        driver.findElement(By.cssSelector("#inputEmail")).sendKeys("abe");
        driver.findElement(By.cssSelector("#inputPassword")).sendKeys("aaa");
        System.out.println("User enters login details ");
        throw new io.cucumber.java.PendingException();  
    }
    @When("user clicks on signin button")
    public void user_clicks_on_signin_button() throws Throwable
    {

        driver.findElement(By.cssSelector("#login")).click();
        System.out.println("User clicks login button");
        throw new io.cucumber.java.PendingException();
    }
}

2。 Login.feature

Feature: Demo Tours Test

@SmokeTest
Scenario: Demo Tours Login with valid credentials

Given user is already on login page
And username and password are entered
When user clicks on signin button
Then user should see home page

3。 TestRunner.java

package com.newtours.qa.runner;

import org.junit.runner.RunWith;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;

@RunWith(Cucumber.class)

@CucumberOptions
(
        strict = true,
        dryRun = false,
        monochrome = true,
        features = "\com\newtours\qa\features",
        glue    = "\com\newtours\qa\stepdefinition"
)

public class TestRunner
{

}

项目结构:

[

这些功能的路径应该是相对的,你所拥有的似乎是根目录。 它正在寻找 C:\com\newtours\qa\features 而不是查看您实际拥有 com/newtours/qa/features.

的文件夹

因此我建议您使用相对路径,例如:src/main/java/com/newtours/qa/features。 同样对胶水执行此操作。

路径看起来不正确。尝试

features = "src/main/java/com/newtours/qa/features",
glue = "com.newtours.qa.stepdefinition"

在运行文件中:

features = "absolute path to feature file or package name of feature file"
glue = "package name of step definition"
  • 功能文件的路径可以是绝对路径,以防有多个功能文件(C:\Users\CucumberMavenProject\src\main\java\com\newtours\qa\features\login.feature)或只是包名("src/main/java/com/newtours/qa/features")

  • 在 glue 中给出存储步骤定义的包名称。步骤定义包下不能有多个步骤定义文件。您需要为每个功能文件创建新的步骤定义包 - "com.newtours.qa.stepdefinition"