Eclipse 中未启用 Selenium Cucumber 功能文件
Selenium Cucumber Feature File is Not Enabling in Eclipse
我已经尝试 运行 使用 Testng maven 的 Cucumber BDD 框架,并且我已经完成了所有设置的配置,但问题是 Cucumber 的功能文件没有启用。下来我会 post 我的代码和 pom.xml 请指导我在哪里以及我错过了什么。 :(
我的 运行ner class代码:
package org.cucumber.MRtests;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.BeforeClass;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import cucumber.api.CucumberOptions;
import cucumber.api.testng.CucumberFeatureWrapper;
import cucumber.api.testng.TestNGCucumberRunner;
@CucumberOptions(features="src/test/resources/Features",glue={"org.cucumber.stepdefs"})
public class OpenMRTest
{
public static WebDriver driver;
private TestNGCucumberRunner testRunner;
@BeforeClass
public void Setup()
{
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
testRunner = new TestNGCucumberRunner(OpenMRTest.class);
}
@Test(description="login",dataProvider="features")
public void login(CucumberFeatureWrapper cFeature)
{
testRunner.runCucumber(cFeature.getCucumberFeature());
}
@DataProvider(name="features")
public Object[][] getFeatures()
{
return testRunner.provideFeatures();
}
@AfterClass
public void tearDown()
{
testRunner.finish();
}
}
我的声明部分代码:
package org.cucumber.stepdefs;
import org.cucumber.MRtests.OpenMRTest;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Sleeper;
import org.testng.Assert;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class LoginPage
{
@Given("^Open Application and Enter url$")
public void open_Application_and_Enter_url() throws Throwable {
OpenMRTest.driver.get("xxxxxxxxxxxxxxxxxxxxxxxxxxxx");
}
@When("^enter username$")
public void enter_username() throws Throwable {
OpenMRTest.driver.findElement(By.xpath("//a[text()='Log In']")).click();
Sleep(5000);
OpenMRTest.driver.findElement(By.id("email")).sendKeys("xxxxxxxxxxxxxxx");
}
private void Sleep(int i) throws InterruptedException {
Thread.sleep(i);
}
@When("^enter password$")
public void enter_password() throws Throwable {
OpenMRTest.driver.findElement(By.id("password")).sendKeys("xxxxxxxxxxxxxxxxxx");
OpenMRTest.driver.findElement(By.xpath("//button[@id='submit-button']")).click();
}
@Then("^verify Msg$")
public void verify_Msg() throws Throwable {
boolean result = OpenMRTest.driver.findElement(By.xpath("//div[@class='grid']/h1")).getText().contains("Top Questions");
Assert.assertTrue(result);
}
}
我的 POM.XML 文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>BDDFramework</groupId>
<artifactId>BDDFramework</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>BDD</name>
<properties>
<suiteXmlFile>src/main/resources/testng.xml</suiteXmlFile>
</properties>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-jvm-deps</artifactId>
<version>1.0.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-testng</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>${suiteXmlFile}</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
</project>
而且我还附上了功能文件的外观。请指导我解决这个问题。
例外是 ::
[INFO] Running TestSuite
[Utils] [ERROR] [Error] java.lang.NullPointerException
at org.cucumber.MRtests.OpenMRTest.getFeatures(OpenMRTest.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:74)
at org.testng.internal.MethodInvocationHelper.invokeMethodNoCheckedException(MethodInvocationHelper.java:45)
at org.testng.internal.MethodInvocationHelper.invokeDataProvider(MethodInvocationHelper.java:131)
at org.testng.internal.Parameters.handleParameters(Parameters.java:706)
at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:49)
at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:37)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:924)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
at org.testng.TestNG.runSuites(TestNG.java:1049)
at org.testng.TestNG.run(TestNG.java:1017)
at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:283)
at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:75)
at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:120)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 1, Time elapsed: 0.591 s <<< FAILURE! - in TestSuite
[ERROR] tearDown(org.cucumber.MRtests.OpenMRTest) Time elapsed: 0.448 s <<< FAILURE!
java.lang.NullPointerException
at org.cucumber.MRtests.OpenMRTest.tearDown(OpenMRTest.java:46)
[INFO]
[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR] OpenMRTest.tearDown:46 NullPointer
[INFO]
http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
@DataProvider
方法是先到运行,再到@BeforeClass
。这意味着 testRunner
仍然是 null
。将初始化从 Setup()
移动到 getFeatures()
@DataProvider(name="features")
public Object[][] getFeatures()
{
testRunner = new TestNGCucumberRunner(OpenMRTest.class);
return testRunner.provideFeatures();
}
我觉得你不是Eclipse中的插件黄瓜
请安装 Cucumber Eclipse 插件
1) 启动 Eclipse IDE 并从帮助菜单中单击 "Install New Software"。
2) 您将看到一个对话框 window,单击 "Add" 按钮。
3) 随意输入名称,让我们取"Cucumber"并输入“http://cucumber.github.com/cucumber-eclipse/update-site”作为位置。单击“确定”。
4) 你回到了之前的 window 但这次你必须在可用软件列表中看到 Cucumber Eclipse Plugin 选项。只需选中该框并按“下一步”按钮。
5) 点击下一步。
6) 单击 "I accept the terms of the license agreement" 然后单击完成。
7) 让它安装,它需要几秒钟才能完成。
8) 您可能会遇到安全警告,也可能不会遇到,如果您遇到这种情况,只需单击“确定”即可。
9) 你现在都完成了,只需单击是。
我已经尝试 运行 使用 Testng maven 的 Cucumber BDD 框架,并且我已经完成了所有设置的配置,但问题是 Cucumber 的功能文件没有启用。下来我会 post 我的代码和 pom.xml 请指导我在哪里以及我错过了什么。 :(
我的 运行ner class代码:
package org.cucumber.MRtests;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.BeforeClass;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import cucumber.api.CucumberOptions;
import cucumber.api.testng.CucumberFeatureWrapper;
import cucumber.api.testng.TestNGCucumberRunner;
@CucumberOptions(features="src/test/resources/Features",glue={"org.cucumber.stepdefs"})
public class OpenMRTest
{
public static WebDriver driver;
private TestNGCucumberRunner testRunner;
@BeforeClass
public void Setup()
{
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
testRunner = new TestNGCucumberRunner(OpenMRTest.class);
}
@Test(description="login",dataProvider="features")
public void login(CucumberFeatureWrapper cFeature)
{
testRunner.runCucumber(cFeature.getCucumberFeature());
}
@DataProvider(name="features")
public Object[][] getFeatures()
{
return testRunner.provideFeatures();
}
@AfterClass
public void tearDown()
{
testRunner.finish();
}
}
我的声明部分代码:
package org.cucumber.stepdefs;
import org.cucumber.MRtests.OpenMRTest;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Sleeper;
import org.testng.Assert;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class LoginPage
{
@Given("^Open Application and Enter url$")
public void open_Application_and_Enter_url() throws Throwable {
OpenMRTest.driver.get("xxxxxxxxxxxxxxxxxxxxxxxxxxxx");
}
@When("^enter username$")
public void enter_username() throws Throwable {
OpenMRTest.driver.findElement(By.xpath("//a[text()='Log In']")).click();
Sleep(5000);
OpenMRTest.driver.findElement(By.id("email")).sendKeys("xxxxxxxxxxxxxxx");
}
private void Sleep(int i) throws InterruptedException {
Thread.sleep(i);
}
@When("^enter password$")
public void enter_password() throws Throwable {
OpenMRTest.driver.findElement(By.id("password")).sendKeys("xxxxxxxxxxxxxxxxxx");
OpenMRTest.driver.findElement(By.xpath("//button[@id='submit-button']")).click();
}
@Then("^verify Msg$")
public void verify_Msg() throws Throwable {
boolean result = OpenMRTest.driver.findElement(By.xpath("//div[@class='grid']/h1")).getText().contains("Top Questions");
Assert.assertTrue(result);
}
}
我的 POM.XML 文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>BDDFramework</groupId>
<artifactId>BDDFramework</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>BDD</name>
<properties>
<suiteXmlFile>src/main/resources/testng.xml</suiteXmlFile>
</properties>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-jvm-deps</artifactId>
<version>1.0.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-testng</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>${suiteXmlFile}</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
</project>
而且我还附上了功能文件的外观。请指导我解决这个问题。
例外是 ::
[INFO] Running TestSuite
[Utils] [ERROR] [Error] java.lang.NullPointerException
at org.cucumber.MRtests.OpenMRTest.getFeatures(OpenMRTest.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:74)
at org.testng.internal.MethodInvocationHelper.invokeMethodNoCheckedException(MethodInvocationHelper.java:45)
at org.testng.internal.MethodInvocationHelper.invokeDataProvider(MethodInvocationHelper.java:131)
at org.testng.internal.Parameters.handleParameters(Parameters.java:706)
at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:49)
at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:37)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:924)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
at org.testng.TestNG.runSuites(TestNG.java:1049)
at org.testng.TestNG.run(TestNG.java:1017)
at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:283)
at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:75)
at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:120)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 1, Time elapsed: 0.591 s <<< FAILURE! - in TestSuite
[ERROR] tearDown(org.cucumber.MRtests.OpenMRTest) Time elapsed: 0.448 s <<< FAILURE!
java.lang.NullPointerException
at org.cucumber.MRtests.OpenMRTest.tearDown(OpenMRTest.java:46)
[INFO]
[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR] OpenMRTest.tearDown:46 NullPointer
[INFO]
http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
@DataProvider
方法是先到运行,再到@BeforeClass
。这意味着 testRunner
仍然是 null
。将初始化从 Setup()
移动到 getFeatures()
@DataProvider(name="features")
public Object[][] getFeatures()
{
testRunner = new TestNGCucumberRunner(OpenMRTest.class);
return testRunner.provideFeatures();
}
我觉得你不是Eclipse中的插件黄瓜
请安装 Cucumber Eclipse 插件
1) 启动 Eclipse IDE 并从帮助菜单中单击 "Install New Software"。
2) 您将看到一个对话框 window,单击 "Add" 按钮。
3) 随意输入名称,让我们取"Cucumber"并输入“http://cucumber.github.com/cucumber-eclipse/update-site”作为位置。单击“确定”。
4) 你回到了之前的 window 但这次你必须在可用软件列表中看到 Cucumber Eclipse Plugin 选项。只需选中该框并按“下一步”按钮。
5) 点击下一步。
6) 单击 "I accept the terms of the license agreement" 然后单击完成。
7) 让它安装,它需要几秒钟才能完成。
8) 您可能会遇到安全警告,也可能不会遇到,如果您遇到这种情况,只需单击“确定”即可。
9) 你现在都完成了,只需单击是。