Java-Maven-cumber:功能文件无法运行

Java-Maven-cumber:功能文件无法运行,java,maven,cucumber,cucumber-jvm,gherkin,Java,Maven,Cucumber,Cucumber Jvm,Gherkin,我需要一些关于运行功能文件的帮助 这是Maven项目的框架: 这是我的pom.xml文件: <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <junit.version>5.0.0</junit.version&

我需要一些关于运行功能文件的帮助

这是Maven项目的框架:

这是我的pom.xml文件:

 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <junit.version>5.0.0</junit.version>
    <selenium.version>3.4.0</selenium.version>
    <surefire.version>2.12.4</surefire.version>
    <slf4j.version>1.7.25</slf4j.version>
    <log4j.version>2.9.1</log4j.version>
    <testng.version>6.11</testng.version>
    <apache.poi.version>3.16</apache.poi.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-chrome-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-remote-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-firefox-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-server</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-ie-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-edge-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-opera-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-safari-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>${apache.poi.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>${apache.poi.version}</version>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>${testng.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.appium</groupId>
        <artifactId>java-client</artifactId>
        <version>${appium.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>${cucumber.version}</version>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${cucumber.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>gherkin</artifactId>
        <version>2.12.2</version>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>${cucumber.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${cucumber.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-core</artifactId>
        <version>1.2.5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>1.2.5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>1.2.5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.github.stephenc.monte</groupId>
        <artifactId>monte-screen-recorder</artifactId>
        <version>0.7.7.0</version>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>3.0.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-jvm</artifactId>
        <version>1.0.11</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java8</artifactId>
        <version>1.2.5</version>
        <scope>test</scope>
    </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${surefire.version}</version>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
    </plugins>
</build>

1.8
1.8
5.0.0
3.4.0
2.12.4
1.7.25
2.9.1
6.11

我无法运行功能文件,因此,我无法运行任何与Cucumber相关的功能文件。 你能帮帮我吗

提前感谢。

几件事:

  • 删除重复的依赖项

  • 确保对所有Cucumber依赖项使用相同的Cucumber版本。否则,Cucumber的行为可能会出人意料。 为每个依赖项使用像这样的版本号是很有帮助的,这样您就可以在一个地方更新它,并确保所有依赖项都使用相同的版本(请注意,您在多个地方使用了这个版本,但我看不到在任何地方定义了cucumber版本)

  • 更新到Cucumber的更新版本;v1.2.5在这一点上已经很老了。目前的版本是3.0.2。 注意:
    info.cukes
    已更新为
    io.cucumber

  • 消除不必要的依赖关系;afaik
    cucumbercore
    gherkin
    不需要,因为它们是其他库的可传递依赖项


  • 好吧,我错过了一个体面的跑步者,因为他有这样的特点:

        @CucumberOptions(features = {"src/test/resource/features"},
                     glue={"stepdefs"},
                     monochrome = true,
                     tags = {"~@Ignore"},
                     plugin = {"pretty","html:target/cucumber-reports/cucumber-pretty",
                               "json:target/cucumber-reports/CucumberTestReport.json",
                               "rerun:target/cucumber-reports/rerun.txt",
                               "usage:target/cucumber-usage.json"}
    )
    public class TestRunner extends ExtendedTestNGRunner{
        private TestNGCucumberRunner testNGCucumberRunner;
    
        @BeforeClass(alwaysRun = true)
        public void setUpClass() throws Exception {
            testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
        }
    
        @Test(groups = "cucumber", description = "Runs Cucumber Feature", dataProvider = "features")
        public void feature(CucumberFeatureWrapper cucumberFeature) {
            testNGCucumberRunner.runCucumber(cucumberFeature.getCucumberFeature());
        }
    
        @DataProvider
        public Object[][] features() {
            return testNGCucumberRunner.provideFeatures();
        }
    
        @AfterClass(alwaysRun = true)
        public void tearDownClass() throws Exception {
            testNGCucumberRunner.finish();
        }
    }
    

    就这些。谢谢大家抽出时间来

    在您的配置中似乎有--format选项。也许试着不用它,看看它是否会运行并从那里开始?这个链接可能会有帮助吗?您需要查看如何清理pom.xml。黄瓜1.2.5和黄瓜3的混合物。选择旧的info.cukes或新的io.cucumber。不需要那么多与硒相关的依赖项。只要使用类似的方法,就可以获得与硒相关的所有信息。seleniumhq.seleniumhq.selenium java 3.11.0大家好:现在,我做了你们写的所有事情,但现在我面临下一个问题:线程“main”java.lang.CompatibleClassChangeError中的异常:找到接口cucumber.api.TestCase,但在org.jetbrains.plugins.cumber.java.run.CucumberJvm2SMFormatter.handleTestCaseStarted(CucumberJvm2SMFormatter.java:80)在org.jetbrains.plugins.cumber.java.run.CucumberJvm2SMFormatter.access$000(cucucumberJVM2smformatter.java:17)在org.jetbrains.plugins.java.run.cumberJVM2smformatter$1.receive(CucumberJvm2SMFormatter.java:32)org.jetbrains.plugins.cucuw当我用${cucumber.version}更新依赖项并将导入添加到StepDefs类时,POM会受到修改。
        @CucumberOptions(features = {"src/test/resource/features"},
                     glue={"stepdefs"},
                     monochrome = true,
                     tags = {"~@Ignore"},
                     plugin = {"pretty","html:target/cucumber-reports/cucumber-pretty",
                               "json:target/cucumber-reports/CucumberTestReport.json",
                               "rerun:target/cucumber-reports/rerun.txt",
                               "usage:target/cucumber-usage.json"}
    )
    public class TestRunner extends ExtendedTestNGRunner{
        private TestNGCucumberRunner testNGCucumberRunner;
    
        @BeforeClass(alwaysRun = true)
        public void setUpClass() throws Exception {
            testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
        }
    
        @Test(groups = "cucumber", description = "Runs Cucumber Feature", dataProvider = "features")
        public void feature(CucumberFeatureWrapper cucumberFeature) {
            testNGCucumberRunner.runCucumber(cucumberFeature.getCucumberFeature());
        }
    
        @DataProvider
        public Object[][] features() {
            return testNGCucumberRunner.provideFeatures();
        }
    
        @AfterClass(alwaysRun = true)
        public void tearDownClass() throws Exception {
            testNGCucumberRunner.finish();
        }
    }