#java #selenium #selenium-webdriver #cucumber #pom.xml
#java #selenium #selenium-webdriver #cucumber #pom.xml
Вопрос:
я попытался запустить Cucumber BDD Framework с Testng maven, и я выполнил все настройки для установки, но проблема в том, что файл функций Cucumber не включен. я опубликую свой код и pom.xml пожалуйста, укажите мне, где и что я пропустил. 🙁
Мой код для класса runner:
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
Ответ №1:
Я думаю, что вы не подключаете cucumber в Eclipse
Пожалуйста, установите плагин Cucumber Eclipse
1) Запустите Eclipse IDE и в меню справки нажмите «Установить новое программное обеспечение».
2) Вы увидите диалоговое окно, нажмите кнопку «Добавить».
3) Введите имя по своему усмотрению, давайте возьмем «Cucumber» и введем «http://cucumber.github.com/cucumber-eclipse/update-site«как местоположение. Нажмите OK.
4) Вы возвращаетесь к предыдущему окну, но на этот раз вы должны увидеть опцию плагина Cucumber Eclipse в списке доступного программного обеспечения. Просто установите флажок и нажмите кнопку «Далее».
5) Нажмите «Далее».
6) Нажмите «Я принимаю условия лицензионного соглашения», затем нажмите «Готово».
7) Дайте ему установиться, для завершения потребуется несколько секунд.
8) Вы можете столкнуться с предупреждением системы безопасности, а можете и не столкнуться, если в случае, если вы это сделаете, просто нажмите OK.
9) Теперь все готово, просто нажмите «Да».
Комментарии:
1. Спасибо, чувак! работает нормально. Но у меня есть одно сомнение, связанное с зависимостями, мы не можем это установить?
2. Нет, я думаю, сначала установите плагин cucumber и добавьте зависимости из репозитория maven. Cucumber junit, Cucumber java, Junit, Selenium
3. Нет, братан, я не устанавливал плагин, поскольку я был новичком в cucumber, я забыл основные вещи для этого. В любом случае, теперь я узнал больше о cucumber. Спасибо за помощь в тот день.
Ответ №2:
@DataProvider
метод запускается первым, перед @BeforeClass
. Это означает, что testRunner
все еще null
включен. Переместите инициализацию с Setup()
на getFeatures()
@DataProvider(name="features")
public Object[][] getFeatures()
{
testRunner = new TestNGCucumberRunner(OpenMRTest.class);
return testRunner.provideFeatures();
}
Комментарии:
1. Вы установили плагин cucumber-eclipse ?
2. я добавил cucumber через зависимости в pom-файле. этого недостаточно?