Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium
Folgendes Script wird ohne @BeforeEach, ohne @AfterEach und ohne Exceptionmeldung ausgeführt.
Die Ausführung springt gleich in @test ... gibt zwar die Printzeilen aus, kracht aber dann, weil BeforeEach fehlt. Es gibt halt nichts zu klicken ohne Seitenaufruf.
Was mache ich da falsch?
Danke und viele Grüße.
Das betreffende Script:
Java:
package tests;
import org.junit.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import pages.EasyTopNaviPage;
public class TestEasySmoketest {
WebDriver driver;
@BeforeEach
void setUp() throws Exception {
System.out.println("+++ setUp. Initialisiere Webdriver");
System.setProperty("webdriver.gecko.driver", "./drivers/geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://demo.seleniumeasy.com/");
}
@AfterEach
void tearDown() throws Exception {
System.out.println("+++ tearDown. Test abgeschlossen. Aufräumen");
driver.close();
}
@Test
public void test() {
System.out.println("+++ Test Start Smoketest");
System.out.println("+++ Klick auf Input Forms in Topnavigation");
EasyTopNaviPage topNaviInputForms = new EasyTopNaviPage();
topNaviInputForms.topNaviInputFormsAnklicken();
}
}
Die zugehörige Page Datei:
Java:
package pages;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class EasyTopNaviPage {
WebDriver driver;
// WEBELEMNTE
// Top Navigation - Drop Down Menu: Input Forms
// Drop Down Link: Input Forms aufklappen
@FindBy(linkText = "Input Forms")
private WebElement linkTopNaviInputForms;
// BEDIENUNG
public void topNaviInputFormsAnklicken() {
linkTopNaviInputForms.click();
}
}
Du scheinst JUni4 zu nutzen - das ist dein @test: (org.junit.Test ist es in JUnit 4, in JUnit 5 wäre es org.junit.jupiter.api.Test).
Die BeforeEach und AfterEach sind JUnit 5 - JUnit 4 kennt diese natürlich nicht. In JUnit 4 wäre es z.B. einfach ein @Before.
==> Halte Deine Abhängigkeiten sauber! Nutze entweder JUnit 4 oder JUnit 5 aber mix die Dinge nicht wild durcheinander!
Hm, ich habe das angepasst und es funktioniert immer noch nicht.
Ich kann Junit4 oder 5 wählen oder gar keine externe Junit4 JAR bei den Properties Java Build Path einbinden, es kommt zum selben Fehler.
Es wundert mich, weil es bei einem anderen Übungsprojekt im Grunde genauso aussieht, auch die Konfiguration.
Beim anderen Übungsprojekt funktioniert auch die Methode in @test ohne public, da reicht void. Das geht bei mir nicht, da kommt die Fehlermeldung die Methode muss public sein.
Jetzt lief es durch. Ich habe alles auf @Before und @after gesetzt, steht auf JUnit5 und die Methoden setUp und tearDown sollten laut Meckermeldung auch public sein.
Also das ist aber immer noch verkehrt ... Wenn Du @Before und @after verwendest zusammen mit dem org.junit.Test, dann ist es JUnit 4 und nicht JUnit 5. Aber vermutlich erkennt der Runner, dass Du ein altes JUnit verwendest und daher führt er es richtig aus.
Ich kann Dir wirklich niur empfehlen, die Abhängigkeiten genau zu prüfen und sicher zu stellen, dass Du nur JUnit 5 verwendest.
Vermutlich wirst Du da komplett JUnit 5 verwenden. Dann sieht der Test erst einmal genau so aus, wie Du gezeigt hast, nur eben ist der Import für Test ein anderer (Halt ein import auf org.junit.jupiter.api.Test statt auf org.junit.Test)