Selenium Fehlerbehandlung durch Java

Kalito

Erfahrenes Mitglied
Hallo,

ich nutze beim automatisierten testen nicht den IDE sondern das RC-Modul von Selenium. Momentan kann ich den Heavy-Weg abgehen, aber keine Test konstruieren, um zu prüfen, ob das Programm ordnungsgemäß funktioniert. Nehmen wir als Beispiel den Login auf einer Seite. Einen erfolgreichen Login bekomme ich ohne Probleme hin. Wenn ich aber versuche einen ungültigen Login zu erzwingen, bricht das Programm an dieser Stelle ab und gibt mir korrekter Weise aus, dass er nicht weiter machen kann. Jedoch würde ich mir wünschen, das er das Verhalten mit diesen Daten als "korrektes Verhalten" einstuft und mit dem nächsten Testfall forfährt und er mir in einer Log sagt, das der Test XYZ kein gültigen Login erfolgt und damit der Test erfolgreich war.

Gruß, Kalito
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

wenn du das ganze per Java machst, dann wird doch an der Stelle sicherlich ne Exception geworfen, die du auch abfangen kannst, oder?

Grüße,
BK
 

Kalito

Erfahrenes Mitglied
Hallo,

das ist es ja eben. Es wird keine Exception im Log geworfen. Im Browser wird mir gesagt, das der Zugang falsch ist, aber seitens Selenium kann ich das nicht erkennen. Erst wenn ich den nächsten Schritt als eingeloggter User ausführen möchte kommt eine Exception
Code:
Exception in thread "main" org.openqa.selenium.NoSuchElementException: The element could not be found (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 77 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.28.0', revision: '18309', time: '2012-12-11 20:21:45'
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.7.5', java.version: '1.6.0_37'
Session ID: ad7a7d2d25a6ee92150755f78a6ba0ed
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=MAC, chrome.chromedriverVersion=26.0.1383.0, acceptSslCerts=false, javascriptEnabled=true, browserName=chrome, rotatable=false, locationContextEnabled=false, version=24.0.1312.56, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:187)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:533)
	at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:302)
	at org.openqa.selenium.remote.RemoteWebDriver.findElementByPartialLinkText(RemoteWebDriver.java:347)
	at org.openqa.selenium.By$ByPartialLinkText.findElement(By.java:265)
	at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:294)
	at Projects.Locayo.login(Locayo.java:16)
	at Projects.Main.main(Main.java:8)

Das scheint aber ein genereller Fehler zu sein.
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

dann übrprüf doch ob die Fehlermeldung im Browser angezeigt wird?
Verstehe nicht so ganz, was du meinst.

Du versuchst nen falschen Login mit einem Testfall. Als nächster Testfall machst du dann auf alle Fälle nen Logout und nochmal nen Login, allerdings dann mit richtigen Zugangsdaten. Dann kommen deine restlichen Testfälle. Verstehe ich das richtig so?

Welcher Befehl schlägt denn fehl. Ein open? clickandwait?

Grüße,
BK
 

Kalito

Erfahrenes Mitglied
Hallo,

ich habe es jetzt so gelöst:
Code:
if(selenium.isElementPresent("id=error")){
			protokoll.schreiben("Test bestanden | Login nicht erfolgreich | Daten: "+username+" und "+password+" | "+sdf.format(now));
			wiederholeDieFunktion(neue, Daten)
		}
		else{
			protokoll.schreiben("Test bestanden | Login erfolgreich | Daten: "+username+" und "+password+" | "+sdf.format(now));
		}

Das bewirkt, dass er erst weitergeht, wenn ich einen gewissen Status habe.

Bin damit aber noch nicht wirklich zufrieden. So könnte ich nur 2 Durchläufe machen, aber wie könnte ich so eine Testserie erstellen?

Gruß Kalito