我无法在黄瓜类step_definitions中实例化我的测试步骤.LoginSteps没有空构造函数

时间:2016-03-14 17:41:03

标签: java selenium-webdriver automation cucumber cucumber-java

运行我的功能测试时出错。这是否与登录页面中的webdriver构造函数有关?我无法弄清楚为什么我会收到此错误:

cucumber.runtime.CucumberException:class step_definitions.LoginSteps没有空构造函数。如果您需要DI,请将黄瓜 - picocontainer放在类路径上......

我的pom中有picocontainter     info.cukes             黄瓜PicoContainer的             1.2.4

    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);
}}

这是我的登录页面

if status --is-login
    source $HOME/.config/fish/login.fish
    tmux; and exec true
end

2 个答案:

答案 0 :(得分:1)

您需要为黄瓜picocontainer安装相同版本的黄瓜。 然后,必须将.m2存储库中的cucumber-picocontainer-version.jar路径添加到 CLASSPATH (在Windows的EnviromentsSetting中),例如: library(Rcpp) cppFunction( code = ' SEXP test( IntegerVector v ) { v.attr("dim") = Dimension(2, 2); Function f("fisher.test"); List fe = f(v); NumericVector p = fe["p.value"]; NumericVector ci = fe["conf.int"]; return List::create( _["p"] = p, _["ci"] = ci ); } ' ) v <- 1:4 test(v) # $p # [1] 1 # # $ci # [1] 0.008512238 20.296715040 # attr(,"conf.level") # [1] 0.95 。最后,重新启动IDE以进行更改。

您可以使用以下命令检查 CLASSPATH 在IDE控制台中是否可用:"C:\Users\Usuario\.m2\repository\io\cucumber\cucumber-picocontainer\5.7.0\*"

示例: enter image description here

答案 1 :(得分:0)

我没有将构造函数放在我的步骤定义类中。

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;
    }
}

请注意,超类确实有一个构造函数。我正在通过它来评估这个免费的eBook。也许如果你自己完成它,你会意识到一个更连贯的方法。我发现它非常可靠(我将我的钩子放在步骤定义的单独文件中,但这是一个品味问题)。 }