2013-08-16 20 views
0

我需要实现一件事:每次当我开始测试时,我都必须登录到系统中。我创建了一个应该运行此登录过程的类。我能够发送适当的值给这个类,它能够登录,但之后,我在我的第二个类(它正在运行测试本身)上收到NullPointerException。看起来它根本无法看到浏览器窗口。请帮助我写出这样的课程,以便我可以在任意数量的课程中重新使用Login类。WebDriver。无法在使用参数化类后运行测试

一个用于登录:

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

回答

1

你有两个独立的WebDriver字段,每个类一个。您已经在Login中初始化了一个,但是您没有将该参考传递回Testing类。解决的办法之一是简单地传递的webdriver作为参数传递给登录构造:

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 
} 
+0

It works,Thank you !!!!!!!!!!!!!! – Kirpidon

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(); 
} 
+0

你好,谢谢你的回答,但还不清楚... – Kirpidon

+0

都能跟得上 - 这是行不通的 - 它打开两个浏览器现在窗户。我已经在私有静态WebDriver驱动程序中初始化了类; – Kirpidon

+0

我没有在您发布的代码中看到初始化。我认为你遇到的问题是你引用了两个不同的驱动程序。测试中有一个驱动程序,而登录中有另一个驱动程序。我建议将Login()更改为Login(driver)之类的东西,并使用您已在Testing中初始化的驱动程序。 – Richard

相关问题