2012-07-18 25 views
1

我在Eclipse中使用Selenium Web Driver和JUnit。我希望通过为可复制步骤创建新类来减少我的代码。为了方便,我希望将这些类存储在单独的文件中。例如,这一个这样的类:如何在硒测试中正确调用外部类(包含硒命令)?

import org.openqa.selenium.ie.InternetExplorerDriver; 

//Login 
public class Login { 
private InternetExplorerDriver driver; 

String url; 
String name; 
String password; 
String language; 
public Login (String ur, String nam, String pass, String lang){ 
    url=ur; 
    name=nam; 
    password=pass; 
    language=lang; 
} 
public void log_in(){ 
driver.get(url); 
driver.findElement(By.name("username")).sendKeys(name);  
driver.findElement(By.name("password")).sendKeys(password);  
driver.findElement(By.name("language")).sendKeys(language);  
driver.findElement(By.name("logon_action")).click(); 
    } 
    } 

这是我的主要测试:

package bobsworld; 

import init.Login; 

import org.junit.Assert; 
import org.junit.Test; 
import org.openqa.selenium.Alert; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.ie.InternetExplorerDriver; 


public class WebTest { 
private WebDriver driver; 


@Test 
public void testUnit() throws Exception { 

//Open new window 
System.setProperty("webdriver.ie.driver", "IEDriverServer.exe"); 
driver = new InternetExplorerDriver(); 

//Login 
init.Login login = new init.Login ("myurl", "log","pas","English"); 
    login.log_in(); 
} 

问题是与对象的驱动程序。我得到java.lang.NullPointerException并且无法执行测试。我应该如何组织调用登录和代码来使我的测试工作?

回答

2

你试图实现的是一种非常流行的方法,称为“PageObjects”。

您的问题:

  1. 使用一些CheckStyle的工具来提高代码质量

  2. 做一大堆的研究有关Java一般

  3. 的登录级或“init.Login “(将包的一部分作为该类的前缀是非常不寻常的),因为您没有转发它,所以无法使用相同的WebDriver实例。通常你会打开第二个WebDriver实例,但这似乎是不可能的,虽然我不知道你的设置。您必须将“驱动程序”作为参数转发给Login类的构造函数。

  4. 尝试使用真实PageObjects描述here inluding PageFactory以提高可读性和可维护性