Я много читал об этой проблеме, но я не могу найти ответ для своего дела.Как реализовать метод выхода из другого класса?
У меня есть класс с методом Селена
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» является классом с группой методов, которые я использую, как инструменты для Aplication.
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" работает нормально, но выход из системы ошибка броска: java.lang.NullPointerException
Где находится NPE? Это ваш WebDriver? Не удается вызвать вызванный вами метод setUp. – Maze
NPE вбрасывание линии getNarzedzia(). Logout(); Теперь я буду отмечать эту строку. Alse Я думаю, что драйвер в методе выхода пуст, но у меня нет идеи, как я могу решить эту проблему. –
Если вы вызываете 'getNarzedzia(). Logout();' возвращается новый объект (также новый WebDriver, который не инициализирован). Исправьте меня, если я ошибаюсь, но я думаю, что вы хотите реализовать какой-то шаблон Singleton, но он не должен доставлять новый объект. Пожалуйста, взгляните на Singleton. – Maze