Ich habe mit Selen gespielt und bin auf Probleme gestoßen. Ich habe ein Problem, den Test fortzusetzen, wenn das Element nicht vorhanden ist.Test fortsetzen, wenn Element nicht vorhanden ist (mit try catch)
Das ist mein PHP-Code
if ($this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl05_liPage') != false) {
$nrOfPages = $this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl05_liPage');
}
if ($this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl04_liPage') != false) {
$nrOfPages = $this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl04_liPage');
}
if ($this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl03_liPage') != false) {
$nrOfPages = $this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl03_liPage');
}
if ($this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl02_liPage') != false) {
$nrOfPages = $this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl02_liPage');
}
if ($this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl01_liPage') != false) {
$nrOfPages = $this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl01_liPage');
}
function seePageHasElement($id)
{
try {
$element = $this->webDriver->findElement(WebDriverBy::id($id));
} catch (\PHPUnit_Framework_AssertionFailedError $f) {
return false;
}
return $element;
}
Und das ist Fehler von Selen-Server
There was 1 error:
1) MyTests::testSpiderThat
Facebook\WebDriver\Exception\NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"ctl00_cphMain_ResultsPager_repPager_ctl05_liPage"}
(Session info: chrome=58.0.3029.110)
(Driver info: chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform=Windows NT 10.0.14393 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 40 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: '123123', ip: '172.18.11.210', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_77'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.29.461591 (62ebf098771772160f391d75e589dc567915b233), userDataDir=C:\Users\myComp\AppData\Local\T
emp\scoped_dir5528_32323}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=58.0.3029.110, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, loc
ationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}]
Session ID: 7220150b6e8bdc6a539de93f2771bf78
*** Element info: {Using=id, value=ctl00_cphMain_ResultsPager_repPager_ctl05_liPage}
Die Frage ist also, wie man richtig überspringen/diesen Fehler unterdrücken, wenn Elemente nicht vorhanden sind? Ich möchte meinen Test fortsetzen, aber es hört einfach auf ... Vielleicht gibt es ein Problem mit der Selenal-Standalone-Version? Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen und ich werde zur Verfügung stellen. Danke
Ich weiß nichts über Selenium, aber meine Vermutung ist, dass Sie versuchen, den falschen Typ von 'Exception' zu fangen, nämlich: 'PHPUnit_Framework_AssertionFailedError'. Die ausgelöste 'Exception' hat jedoch den Typ' .. \ NoSuchElementException'. Also, es sei denn, das letztere erweitert das erstere, Sie sollten '.. \ NoSuchElementException' (ebenso) abfangen, oder vielleicht eine noch allgemeinere 'Exception'. –