Java 我无法在cucumber类step_definitions.LoginSteps中实例化我的teststeps';我没有空的构造函数
我在运行功能测试时出错。这与登录页面中的webdriver构造函数有关吗?我不明白为什么会出现这个错误: cucumber.runtime.CucumberException:class step_definitions.LoginSteps没有空构造函数。如果需要DI,请将cucumber picocontainer放在类路径上 我的pom里有Picocontainer 信息杯 黄瓜皮容器 1.2.4Java 我无法在cucumber类step_definitions.LoginSteps中实例化我的teststeps';我没有空的构造函数,java,selenium-webdriver,automation,cucumber,cucumber-java,Java,Selenium Webdriver,Automation,Cucumber,Cucumber Java,我在运行功能测试时出错。这与登录页面中的webdriver构造函数有关吗?我不明白为什么会出现这个错误: cucumber.runtime.CucumberException:class step_definitions.LoginSteps没有空构造函数。如果需要DI,请将cucumber picocontainer放在类路径上 我的pom里有Picocontainer 信息杯 黄瓜皮容器 1.2.4 public class LoginSteps { private final Login
public class LoginSteps {
private final LoginPage login;
SharedDriver driver;
public LoginSteps(LoginPage login, SharedDriver driver) {
this.login=login;
this.driver=driver;
}
@Given("^the Pctice Login page is loaded$")
public void the_Poactice_Login_is_loaded ()throws Throwable {
driver.getDriver().get("....ogin/");
}
@When("^The logins into the account$")
public void the_logins_into_the_account() throws Throwable {
login.login(false);
}
这是我的登录页面
public class LoginPage extends BaseClass {
private final By username = By.id("userName");
private final By password= By.id("password");
private final By submit= By.id("submit_0");
public LoginPage(WebDriver driver){
super(driver);
}
public HomePage login(Boolean newuser) throws InterruptedException {
DataFactory log= new DataFactory();
if (newuser) {
Thread.sleep(5000);
driver.findElement(username).click();
driver.findElement(username).sendKeys(log.getFirstName());
driver.findElement(password).sendKeys(log.getFirstName());
} else {
driver.findElement(username).click();
}
return new HomePage(driver);
}}
我不在步骤定义类中放置构造函数 LandingPageSteps.java
package practice.steps;
import practice.pages.LandingPage;
import cucumber.api.java.en.When;
public class LandingPageSteps extends DriverFactory{
@When("^she chooses to sign up$")
public void she_chooses_to_sign_up() throws Throwable {
new LandingPage(driver).she_chooses_to_sign_up();
}
}
DriverFactory.java
package practice.steps;
import org.junit.Assert;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import practice.util.PropertyReader;
public class DriverFactory {
protected static WebDriver driver;
public DriverFactory() {
initialize();
}
public void initialize() {
if (driver == null)
createNewDriverInstance();
}
private void createNewDriverInstance() {
PropertyReader propReader = new PropertyReader();
String browser = propReader.readProperty("browser");
if (browser.equalsIgnoreCase("firefox")){
driver = new FirefoxDriver();
} else if (browser.equalsIgnoreCase("chrome")) {
System.setProperty("webdriver.chrome.driver", "c:/SeleniumWebdrivers/chromedriver.exe");
driver = new ChromeDriver();
} else {
System.out.println(propReader.propertyNotValidMsg("browser", browser));
}
Assert.assertNotNull("Driver failed initialization", driver);
}
public WebDriver getDriver() {
return driver;
}
public void destroyDriver() {
driver.quit();
driver = null;
}
}
请注意,超类确实有一个构造函数。我是通过使用它来免费评估它的。也许如果你自己使用它,你会发现一个更连贯的方法。我发现它非常可靠(我将我的挂钩与步骤定义放在一个单独的文件中,但这是一个品味问题)。
}您需要为cucumber picocontainer安装相同版本的cucumber。 然后,您必须将cucumber-picocontainer-version.jar的路径添加到类路径(在Windows环境设置中),该路径位于.m2存储库中,例如:
“C:\Users\Usuario\.m2\repository\io\cucumber\cumber picocontainer\5.7.0\*”
。最后,重新启动IDE以进行更改
您可以使用以下命令检查您的类路径是否在IDE控制台中可用:set CLASSPATH
例如:
如果子类缺少构造函数,java在默认情况下不会调用超类的构造函数吗?您真的需要LoginPage子类中的构造函数吗?从消息中可以看出,问题非常清楚。LoginSteps类没有默认构造函数,因此无法由Cucumber自动实例化。我们可以使用相同的appr吗oach for iOS Automation也使用Serenity BDD?这段代码在GitHub上可用吗?