如何从另一个类注销实现方法?

时间:2016-04-21 08:27:23

标签: java selenium

我读了很多关于这个问题但我无法找到答案。

我有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

2 个答案:

答案 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。