0

我需要实现一件事:每次开始测试时,我都必须登录系统。我创建了一个应该运行这个登录过程的类。我能够向这个类发送正确的值并且它能够登录,但在那之后,我在我的第二个类(它正在运行测试本身)上收到 NullPointerException。看起来它根本看不到浏览器窗口。请帮助我以一种允许我在尽可能多的类中重用登录类的方式编写这些类。

一个用于登录:

public class Login {

    private static WebDriver driver;
    public static void Find_Fields (String path,String login, String password) {
        driver = Driver.get(path);
        WebElement login_field = driver.findElement(By.id("abc"));
        login_field.sendKeys(login);
        //Find Password Field on Start page
        WebElement password_field = driver.findElement(By.id("abc"));
        password_field.sendKeys(password);
        //Find Login Button
        WebElement login_button = driver.findElement(By.xpath("abc"));
        login_button.click();
    }
}

public class Testing {

    private static WebDriver driver;
    @BeforeClass
    public static void a_setup(){
        //here I'm trying to run Login with parameters
        Login fields = new Login();
        fields.Find_Fields(LOGIN_PATH, LOGIN, PASSWORD);
    }

    @Test
    public void b_Press_Login_Button(){
        //Here I'm trying to start testing in session started from a_setup()
        WebElement keyword = driver.findElement("..."));
        keyword.sendKeys("...");
    }

    @AfterClass
    public static void Close(){
        driver.quit();
        driver.close();
    }
}
4

2 回答 2

1

您有两个独立的 WebDriver 字段,每个类一个。您已经在 Login 中初始化了一个,但是您没有将引用传递回 Testing 类。一种解决方案是简单地将 WebDriver 作为参数传递给 Login 构造函数:

public class Login {

    private WebDriver driver;

    public void Find_Fields (String path,String login, String password) {
        driver.get(path);
        //(...) rest of this method is unchanged
    }

    public Login(WebDriver driver) {
        this.driver = driver;
    }
}

public class Testing {

    private static WebDriver driver;
    @BeforeClass
    public static void a_setup(){
        driver = new FirefoxDriver();        //initialize the driver
        Login fields = new Login(driver);    //pass the instance of WebDriver to login class
        fields.Find_Fields(LOGIN_PATH, LOGIN, PASSWORD);
    }

    //(...) rest of the class remains unchanged
}
于 2013-08-16T22:11:33.570 回答
1

您需要使用浏览器对象初始化驱动程序。像这样的东西应该工作:

public static void Find_Fields (String path,String login, String password)
{
    driver = new FirefoxDriver();
    driver.get(path);
    WebElement login_field = driver.findElement(By.id("abc"));
    login_field.sendKeys(login);
    //Find Password Field on Start page
    WebElement password_field = driver.findElement(By.id("abc"));
    password_field.sendKeys(password);
    //Find Login Button
    WebElement login_button = driver.findElement(By.xpath("abc"));
    login_button.click();
}
于 2013-08-16T21:32:05.690 回答