我使用黄瓜+硒。我创建了Auth测试,它看起来像这样
public class AuthTestSteps {
private static WebDriver driver;
private static WebDriverWait wait;
@Given("^some condition$")
public void some_condition(){
System.setProperty("webdriver.chrome.driver","chromedriver.exe");
driver = new ChromeDriver();
wait = new WebDriverWait(driver, 30);
}
@If("^open link \\\"(.*)\\\"$")
public void open_link(String pageUrl){
driver.get(pageUrl);
wait.until(ExpectedConditions.visibilityOfElementLocated(Auth.profileBtn));
Auth.clickProfileBtn(driver);
}
.....
该测试工作得很好,它正在做我想要的所有,但我尝试创建另一个测试。它很简单:
public class CallDoctorTestStep {
private static WebDriver driver;
private static WebDriverWait wait;
@Given("^some condition$")
public void нужно_вызвать_врача(){
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
driver = new ChromeDriver();
wait = new WebDriverWait(driver, 30);
}
@IF("^some condition \\\"(.*)\\\"$")
public void пользователь_перейдет_на_главную(String pageUrl){
driver = new ChromeDriver();
driver.get(pageUrl);
wait.until(ExpectedConditions.visibilityOfElementLocated(CallDoctor.callDoctorBtn));
CallDoctor.clickCallDoctor(driver);
}
...........
正如您所看到的,差异很小,但是!当我尝试启动CallDocrotTestStep
时,它会在If
条件下使用nullPointerException。浏览器无法启动。所以我试着搜索,问题是什么。初始化的问题,如果我初始化driver
作为CallDoctorTestStep类字段,如下所示:private static WebDriver driver = new ChromeDriver();
它将启动浏览器。我认为变量的可见性存在问题,但为什么AuthTestStep
效果很好,但CallDoctorTestStep
如果我在driver
中初始化AuthTestStep
则无法正常工作?
答案 0 :(得分:0)
您已宣布
private static WebDriver driver;
private static WebDriverWait wait;
在AuthTestSteps类中。
访问修饰符private
表示它们只能在声明它们的类中访问,在本例中为AuthTestSteps。
这意味着CallDoctorTestStep类无法像你说的那样访问它们。
要在StepDefinitions之间共享状态,请查看使用依赖注入(DI)。 Cucumber支持几个DI框架,您可以在这里阅读更多相关信息:https://cucumber.io/docs/reference/java-di