Mehrere Methoden in einer Klasse testen

Avalon

Bekanntes Mitglied
Hallo, ich teste den Login auf eine Website.Dafür habe ich eine Klasse mit vier Methoden (Passwort, Benutzername richtig/PW falsch, Benutzer richtig/umgekehrt und beides falsch. Alles mit dem Chromium Webdriver, Junit5 in Eclipse.

Java:
public class LoginTest {

@Before
//...

@After
//...

@Test1
//..

@Test2
//..

}

Wenn ich in Eclipse jede Methode einzeln teste, funktioniert das auch. Aber wenn ich die ganze Klasse mit allen Methoden testen will, funktioniert nur der Erste Test, die anderen schlagen fehl. Hat jemand eine Ahnung, woran das liegen könnte. Jeden Test in eine eigene Klasse auslagen, hat auch nicht funktioniert. Einer geht durch, die anderen schlagen fehl. Im Netz hab ich nichts gefunden, womit ich was anfangen kamnn.
 
Beste Antwort
Java:
        System.setProperty("webdriver.chrome.driver","/project/src/test/resources/ChromeDriver/chromedriver.exe");
Das löschen, dann dürfte es klappen. Der Befehl, muss wenn vor chromeDriver.start() - und vermutlich ist der Pfad falsch, so dass der zweite Test dann den Chromedriver nicht mehr findet.

Avalon

Bekanntes Mitglied
Java:
public class LoginTest {
    
    private WebDriver driver;
    private Map<String, Object> vars;
    JavascriptExecutor js;

    @Before
    public void setUp() {
//        ChromeOptions options = new ChromeOptions();
//        options.addArguments("--headless");
        driver = new ChromeDriver();
        js = (JavascriptExecutor) driver;
        vars = new HashMap<String, Object>();
    }

    @After
    public void tearDown() {
        driver.quit();
    }

    @Test
    public void TestLogin() {
        System.setProperty("webdriver.chrome.driver","/project/src/test/resources/ChromeDriver/chromedriver.exe");
        driver.get("https://www.testpage.com/KontoLogin.jsp");
        driver.manage().window().setSize(new Dimension(1054, 812));
        js.executeScript("window.scrollTo(0,0)");
        driver.findElement(By.id("username")).click();
        driver.findElement(By.id("username")).sendKeys("username");
        driver.findElement(By.id("password")).sendKeys("pw");
        driver.findElement(By.cssSelector("a:nth-child(8) > img")).click();
        driver.findElement(By.cssSelector("span")).click();
                
        WebElement foo = driver.findElement(By.partialLinkText("Datenschutz"));
        
        assertEquals("Datenschutz", foo.getText());
        
    }
    
    @Test
    public void TestLoginPasswortFalsch() {
        System.setProperty("webdriver.chrome.driver","/project/src/test/resources/ChromeDriver/chromedriver.exe");
        driver.get("https://www.testpage.com/KontoLogin.jsp");
        driver.manage().window().setSize(new Dimension(1054, 812));
        js.executeScript("window.scrollTo(0,0)");
        driver.findElement(By.id("username")).click();
        driver.findElement(By.id("username")).sendKeys("username");
        driver.findElement(By.id("password")).sendKeys("pw");
        driver.findElement(By.cssSelector("a:nth-child(8) > img")).click();
        driver.findElement(By.cssSelector("span")).click();
                        
        boolean foo = driver.getPageSource().contains("Datenschutz");

        assertFalse(foo);   
    }
 
B

BestGoalkeeper

Gast
Also doch nen Token. Und was funktioniert jetzt nicht wie es funktionieren sollte?

Btw das ist ein Integrationstest den du da machst.
 

Avalon

Bekanntes Mitglied
Und was funktioniert jetzt nicht wie es funktionieren sollte?
Wenn ich jede Methode einzeln Teste (rechtsklick auf Methodenname, run as, junit) funktioniert es (für jede Methode). Ein Chromefenster poppt auf, Daten werden in die Felder übertragen, es wird geprüft, das Fenster schließt sich wieder und alles passt. Mach ich das gleiche mit der Klasse (so das alle Methodentests hintereinander ablaufen, läuft nur die erste Methode durch. Die restlichen schlagen fehl.
 

LimDul

Top Contributor
Java:
        System.setProperty("webdriver.chrome.driver","/project/src/test/resources/ChromeDriver/chromedriver.exe");
Das löschen, dann dürfte es klappen. Der Befehl, muss wenn vor chromeDriver.start() - und vermutlich ist der Pfad falsch, so dass der zweite Test dann den Chromedriver nicht mehr findet.
 
Beste Antwort
K

kneitzel

Gast
Kann es sein, dass der ChromeDriver so dicht beieinander immer die gleiche Umgebung nutzt? Der neue ChromeDriver wird zwar erstellt, aber er hat die Session immer noch.

Ich würde da mal driver.manage().deleteAllCookies() nach der Erstellung der ChromeDriver Instanz aufrufen.

sprich: nach der Anmeldung bist du angemeldet. Die fehlgeschlagene Anmeldung kannst du dann nicht mehr testen ...

Das aber nur als Idee, ich habe da keine Praxis Erfahrungen mit.

Edit: das von Limdul hört sich deutlich sinnvoller an ... das von mir wird eher nicht das Problem sein ...
 

Avalon

Bekanntes Mitglied
Java:
        System.setProperty("webdriver.chrome.driver","/project/src/test/resources/ChromeDriver/chromedriver.exe");
Das löschen, dann dürfte es klappen. Der Befehl, muss wenn vor chromeDriver.start() - und vermutlich ist der Pfad falsch, so dass der zweite Test dann den Chromedriver nicht mehr findet.
Das löschen der Zeile war die Lösung. Der Treiber wird in Path der Windows Umgebungsvariablen gesucht. Also für Windows funktioniert das so. Ich denke mal die Angabe des Pfades in
Java:
System.setProperty
, wird dann für Linux nötig sein.

Danke
 

LimDul

Top Contributor
Dann aber mit dem richtigen Pfad - da das eine System-Property ist, muss dort der absolute Pfad rein. Wenn du den richtigen einträgst, dürfte es auch klappen - aber dann halt wirklich mit Laufwerk & kompletter Pfad.
 

Avalon

Bekanntes Mitglied
Muss der Pfad auch absolut sein, wenn ich die chromedriver.exe einem Ordner des Projektes habe? Ich hab generell das Problem, wie ich alle benötigten Dateien in das Projekt direkt reinbekomme (z.B. beim Export in eine ZIP Datei). Jedes mal wenn ich das Projekt zu Hause in mein Eclipse importiere, muss ich mir diverse Dateien aus dem Netz nachladen, weil sie nicht auf meinem Rechner sind. Z.B die chromdriver.exe.
 
Zuletzt bearbeitet:

LimDul

Top Contributor
Vermutlich. Es ist eine System-Property. Also erwartet der ChromeDriver vermutlich den absoluten Pfad. So wie er da steht, ist er auf jeden Fall falsch - weil er mit / anfängt und damit entweder absolut ist oder eine Resource bezeichnet - dann ist er aber auch falsch. Dann müsste er /ChromeDriver/chromedriver.exe heißen. Evtl. würde er ohne / am Anfang gehen, aber im Zweifelsfall da mal in die Doku schauen.

Edit: Aus der Doku würde ich sagen - Absoluter Pfad.
 

Avalon

Bekanntes Mitglied
Vermutlich. Es ist eine System-Property. Also erwartet der ChromeDriver vermutlich den absoluten Pfad. So wie er da steht, ist er auf jeden Fall falsch - weil er mit / anfängt und damit entweder absolut ist oder eine Resource bezeichnet - dann ist er aber auch falsch. Dann müsste er /ChromeDriver/chromedriver.exe heißen. Evtl. würde er ohne / am Anfang gehen, aber im Zweifelsfall da mal in die Doku schauen.

Edit: Aus der Doku würde ich sagen - Absoluter Pfad.

Im Beispiel haben die einen relativen Pfad angegeben


Java:
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.*;
import org.junit.Test;

public class GettingStarted {
  @Test
  public void testGoogleSearch() throws InterruptedException {
    // Optional. If not specified, WebDriver searches the PATH for chromedriver.
    System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");

    WebDriver driver = new ChromeDriver();
    driver.get("http://www.google.com/");
    Thread.sleep(5000);  // Let the user actually see something!
    WebElement searchBox = driver.findElement(By.name("q"));
    searchBox.sendKeys("ChromeDriver");
    searchBox.submit();
    Thread.sleep(5000);  // Let the user actually see something!
    driver.quit();
  }
}
 
K

kneitzel

Gast
Wo ist das ein relativer Pfad? Der Pfad fängt mit einem / an und ist damit ein typischer absoluter Pfad unter Unix und Unix artigen Systemen.
 

LimDul

Top Contributor
Der Pfad ist absolut - der fängt mit / an und kennzeichnet in der Regel absolute Pfade und da ist nirgendwo Projekt-Relativ erwähnt. Außerdem ist das nur ein Beispiel.
 

mrBrown

Super-Moderator
Mitarbeiter

Avalon

Bekanntes Mitglied
Laufwerksbuchstaben gibts nur unter Windows :)
Da stamme ich her. Windows 3.1 war mein erstes. :-D Linux hatte ich zu Zeiten, in denen man alle Partitionen noch selber anlegen musste, um es zu installieren. Danach immer mal wieder probiert und doch wieder bei Windows gelandet. Aber die Gründe bei Windows zu bleiben, werden immer weniger. Ich glaub es ist eigentlich nur noch Faulheit zu wechseln. :-D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul JEE - MessageDrivenBean und mehrere Server Frameworks - Spring, Play, Blade, Vaadin & Co 7
LesterBurnham Spring, Config Server, mehrere Gitlab Repos für Konfiguration - best practices Frameworks - Spring, Play, Blade, Vaadin & Co 1
L JavaFX Anwendung mit Spring Boot und mehrere FXML Forms Frameworks - Spring, Play, Blade, Vaadin & Co 5
N Wie manage ich unter Spring mehrere Datenbankverbindung mit Hibernate Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 eureka server in Gradle Projekt kann Methoden nicht finden Frameworks - Spring, Play, Blade, Vaadin & Co 5
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
A WebClientBuilder Rückgabe einer Liste Frameworks - Spring, Play, Blade, Vaadin & Co 1
K Laden einer Datei vom Netzlaufwerk mit LDAP-Authentifizierung Frameworks - Spring, Play, Blade, Vaadin & Co 3
L Hilfe beim Erstellen einer Java Web Anwendung gesucht Frameworks - Spring, Play, Blade, Vaadin & Co 5
Christopher865 Netflix Eureka: Zwei Server - Einer stürtzt ab Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Mehere gleichnamige Konfigurationsparameter in einer application.properties Frameworks - Spring, Play, Blade, Vaadin & Co 3
pkm Wie kann man in Vaadin einer Zeile mit ThemeResource einen ClickEventListener geben? Frameworks - Spring, Play, Blade, Vaadin & Co 0
OnDemand JUnit testen einer private Methode Frameworks - Spring, Play, Blade, Vaadin & Co 5
F Redirect in einer Spring Boot WebApplication Frameworks - Spring, Play, Blade, Vaadin & Co 7
E Spring Webflow zwei POJO's in einer View Frameworks - Spring, Play, Blade, Vaadin & Co 0
M Spring: Den Context einer bean auslesen... Frameworks - Spring, Play, Blade, Vaadin & Co 3
B Wert in einer while schleife überspringen Frameworks - Spring, Play, Blade, Vaadin & Co 7
J zu einer Zeile zürück springen Frameworks - Spring, Play, Blade, Vaadin & Co 9

Ähnliche Java Themen

Neue Themen


Oben