2017-10-09 1 views
0

Je fais des tests avec Selenium, et les tests doivent se connecter à un système. Cette connexion prend 17 secondes pour se produire pleinement. Le système doit attendre la fin, sinon l'ensemble du test échoue.Sélénium n'attendant pas la page à charger

J'ai essayé plusieurs façons de le faire, mais toutes échouent.

Code D'abord, je l'ai essayé était le suivant:

driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS); 

Quand je l'utilise que, même si je le dis d'attendre pendant 100 secondes, je reçois un délai d'attente 2 (ce qui est presque deux bonnes minutes!) secondes plus tard avec cette stacktrace.

org.openqa.selenium.WebDriverException: timeouts 
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown' 
System info: host: 'CMTCLX62137', ip: '53.19.227.206', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_31' 
Driver info: org.openqa.selenium.firefox.FirefoxDriver 
Capabilities [{moz:profile=C:\Users\ALEX\AppData\Local\Temp\rust_mozprofile.Z2KJE568nWB8, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, moz:headless=false, platform=ANY, proxy=Proxy(manual, http=localhost), specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=true, browserVersion=56.0, platformVersion=6.1, moz:processID=21116.0, browserName=firefox, javascriptEnabled=true, platformName=windows_nt}] 
Session ID: b2dca4a5-623a-4311-ad07-6444785dbcaf 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:150) 
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:115) 
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:45) 
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164) 
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637) 
    at org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions$RemoteTimeouts.implicitlyWait(RemoteWebDriver.java:868) 

Un autre code que j'ai essayé:

new WebDriverWait(driver, 100).until(webDriver -> ((JavascriptExecutor) webDriver).executeScript(
     "return document.readyState").equals("complete")); 

Avec cela, il ne fonctionne tout simplement pas attendre et je reçois un

org.openqa.selenium.NoSuchElementException: Unable to locate element 

La seule façon pour mon test au travail est en utilisant un Thread.sleep(), mais c'est une option vraiment mauvaise, car parfois il charge plus vite que prévu et parfois il échoue encore parce qu'il prend plus de 17s.

Toute autre option à attendre le chargement complet de la page?

+0

Le sélénium attend toujours que la page soit chargée. S'il vous plaît envoyer tout le code qui provoque l'erreur afin que nous puissions enquêter. – Buaban

Répondre

2

Ceci est déjà résolu ici: Selenium wait until document is ready

Quoi qu'il en soit, je l'habitude d'attendre des contrôles que je dois utiliser, au lieu d'attendre jusqu'à ce que la page complète est chargée:

wait.until(ExpectedConditions.elementToBeClickable(By 
      .id(ConfigData.IDs.buttonLogin))); 
+0

Désolé, réponse erronée comment. Cela fonctionne. Je vous remercie. –

+0

Heureux que cela a fonctionné pour vous :) –

+1

@ IgorÁvila Curieux de savoir ce qu'est 'ConfigData.IDs' tout au sujet. Je ne vois rien de semblable dans la question. – DebanjanB

0

Je suppose utilisé elementToBeClickable() avec Explicite attente à la place de chargement de page

WebElement ele= driver.findElement("Locator Value"); 
WebDriverWait wait=new WebDriverWait(driver, 20); 
wait.until(ExpectedConditions.elementToBeClickable(ele)); 
ele.click(); 
+0

Toujours obtenir une "org.openqa.selenium.NoSuchElementException: Impossible de localiser l'élément:" avec ce code. –

+0

pouvez-vous coller le code HTML ou l'URL – iamsankalp89

+0

de toute façon je suppose que vous avez la réponse. – iamsankalp89