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并且无法执行测试。我应该如何组织对登录和代码的调用以使我的测试工作?

4

1 回答 1

2

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

你的问题:

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

  2. 总体上对 Java 进行大量研究

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

  4. 尝试使用此处描述的真实 PageObjects 包括PageFactory 以提高可读性和可维护性

于 2012-07-18T18:40:28.953 回答