运行我的功能测试时出错。这是否与登录页面中的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
答案 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\*"
答案 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。也许如果你自己完成它,你会意识到一个更连贯的方法。我发现它非常可靠(我将我的钩子放在步骤定义的单独文件中,但这是一个品味问题)。 }