我读了很多关于这个问题但我无法找到答案。
我有Selenium方法的课程
public class PrzesylkiPrzygotowane implements Tools{
private WebDriver driver;
private StringBuffer verificationErrors = new StringBuffer();
//Override
public Narzedzia getNarzedzia() {
return new Narzedzia();
}
public void setUp() throws Exception {
StartEN start = new StartEN(GetParams.getUser(),
GetParams.getPassword());
this.driver = start.getDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testPrzesylkiPrzygotowane() throws Exception {
setUp();
driver.findElement(By.cssSelector("a[href*='?action=GetZbior&arg1=220170'")).click();
driver.findElement(By.cssSelector("button.widgetButton")).click();
driver.findElement(By.id("nazwa")).clear();
Thread.sleep(1000);
driver.findElement(By.id("nazwa")).sendKeys("Mar");
driver.findElement(By.xpath("//body[@id='Body']/div[4]/ul/li/strong[3]")).click();
driver.findElement(By.id("submit_button")).click();
Thread.sleep(1000);
//NPE throw here
getNarzedzia().logout();
}
...休息代码。
我为这个班级做了界面
public interface Tools {
public Narzedzia getNarzedzia();
}
“Narzedzia”是一个包含一组方法的类,我使用它们作为应用程序的工具。
public class Narzedzia{
public WebDriver driver;
boolean acceptNextAlert = true;
public void logout() throws InterruptedException{
//Ustawienia driv = new Ustawienia();
driver.findElement(By.linkText("Wyloguj")).click();
Thread.sleep(1000);
assertTrue(closeAlertAndGetItsText(driver).matches("^Czy na pewno chcesz wyjść z Elektronicznego Nadawcy[\\s\\S] Sprawdź czy wszystkie dane zostały przekazane do placówki\\.$"));
driver.close();
}
public String closeAlertAndGetItsText(WebDriver driv) {
try {
Alert alert = driv.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
...休息代码
当我在“Narzedzia”中运行测试休息od方法工作正常但注销抛出错误: 的显示java.lang.NullPointerException
答案 0 :(得分:0)
使用Google,你应该找到很多关于在Java中实现Singleton的提示。 它应该是这样的:
public class SingleObject {
//create an object of SingleObject
private static SingleObject instance = new SingleObject();
//make the constructor private so that this class cannot be
//instantiated
private SingleObject(){}
//Get the only object available
public static SingleObject getInstance(){
return instance;
}
}
来源:Design Pattern - Singleton Pattern(我的第一个搜索结果是谷歌'单身模式java')
基本上,构造函数必须是私有的,并且你的getter方法必须返回一个保存对象的字段。教程网站周围有一些变种。其中一些是线程安全的。选择你需要的东西。
答案 1 :(得分:0)
我解决了问题。
使用“Narzedzia”类
中的参数创建构造函数public Narzedzia (WebDriver wd){
this.driver = wd;
}
在PrzesylkiPrzygorowane
中调用这样的构造函数 public Narzedzia getNarzedzia() {
return new Narzedzia(this.driver);
}
测试已完成,注销不会引发NPE。