Ich lese viel über dieses Problem, aber ich kann keine Antwort für meinen Fall finden.Wie implementieren Sie Methodenabmeldung von einer anderen Klasse?
Ich habe Klasse mit Selen Methode
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();
}
... Code Ruhe.
I-Schnittstelle für diese Klasse
public interface Tools {
public Narzedzia getNarzedzia();
}
„Narzedzia“ ist eine Klasse mit einer Gruppe von Verfahren hergestellt, die ich wie Werkzeuge für aplication verwenden.
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;
}
}
... rest Code
Wenn ich Test Rest od Methode in "Narzedzia" laufen funktioniert gut, aber abzumelden Wurf Fehler: java.lang.NullPointerException
Wohin wird die NPE geworfen? Ist es dein WebDriver? Die aufgerufene setUp-Methode kann nicht aufgerufen werden. – Maze
NPE in Zeile werfen getNarzedzia(). Logout(); Ich werde diese Linie jetzt markieren. Alse Ich denke, dass Treiber in Logout-Methode leer ist, aber ich habe keine Ahnung, wie ich dieses Problem lösen kann. –
Wenn Sie 'getNarzedzia() .logout() aufrufen, wird ein neues Objekt zurückgegeben (auch ein neuer WebDriver, der nicht initialisiert wird). Korrigiere mich, wenn ich falsch liege, aber ich denke, du möchtest ein Singleton-Muster implementieren, aber es darf kein neues Objekt liefern. Bitte werfen Sie einen Blick auf den Singleton. – Maze