我在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
并且无法执行测试。我应该如何组织对登录和代码的调用以使我的测试工作?
答案 0 :(得分:2)
您尝试实现的是一种非常流行的方法,称为“PageObjects”。
您的问题:
使用一些checkstyle工具来提高代码质量
对Java进行大量研究
登录类或“init.Login”(将包的一部分作为类的前缀非常罕见)无法使用相同的WebDriver实例,因为您不转发它。通常你会打开第二个WebDriver实例,但这似乎是不可能的,虽然我不知道你的设置。您必须将“driver”作为参数转发给Login类的构造函数。
尝试使用真实的PageObjects,如here所述,包括PageFactory,以提高可读性和可维护性