初始化硒驱动有什么区别?

时间:2018-01-11 06:45:41

标签: java selenium cucumber

我使用黄瓜+硒。我创建了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则无法正常工作?

1 个答案:

答案 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