2011-09-02 6 views
16

Attualmente, sto lavorando su WebDriver invocare browser IE per eseguire il test. Ma ho ricevuto un NoSuchElementException quando ho provato a eseguire il semplice esempio di seguito.NoSuchElementException si è verificato durante l'attuazione del InternetExplorerDriver in selenio WebDriver

Tuttavia, il codice ha funzionato correttamente se ho usato driver Chrome o driver di Firefox. Qualsiasi idea o pensiero sarebbe apprezzata.

Jar: selenium-server-standalone-2.5.0.jar

Codice:

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.ie.InternetExplorerDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 

public static void main(String[] args) throws InterruptedException { 
    DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer(); 
    ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true); 
    WebDriver driver = new InternetExplorerDriver(ieCapabilities); 
    driver.get("www.google.com"); 
    driver.findElement(By.name("q")); 
} 

Messaggio di errore:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with name == q (WARNING: The server did not provide any stacktrace information) 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: '2.5.0', revision: '13516', time: '2011-08-23 18:29:57' 
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_25' 
Driver info: driver.version: RemoteWebDriver 
    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.ErrorHandler.createThrowable(ErrorHandler.java:131) 
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:409) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:197) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.java:246) 
    at org.openqa.selenium.By$ByName.findElement(By.java:298) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:189) 
    at lib.WebDriver2.main(WebDriver2.java:14) 
+0

Lo stacktrace/messaggio di errore sembra incompleto, sei sicuro che sia completo? – Jasper

+0

Ciao, ho aggiornato il messaggio di errore :) Il browser IE è stato aperto e indirizzato alla pagina google. Ma, non è riuscito come ha cercato di trovare l'elemento "q" – user836112

+0

stesso problema qui. Sto usando un sistema a 64 bit, ma con un jvm a 32 bit, quindi anche il driver è a 32 bit. Nulla di seguito elencato ha aiutato –

risposta

14

Hai evitato esplicitamente di dover impostare le impostazioni della modalità protetta di IE. Questo è ciò che fa l'impostazione della capacità InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS. Quando rimuovi questa impostazione di funzionalità e imposti le impostazioni della Modalità protetta come documentato nello project wiki, sembra che il problema si risolva da solo.

+0

Ciao Jim. Grazie per la soluzione. Non ho alcun privilegio per modificare le impostazioni di sicurezza. C'è una soluzione? Grazie! – sbose

+0

La capacità ** è ** la soluzione alternativa. [Questo post del blog] (http://jimevansmusic.blogspot.com/2012/08/youre-doing-it-wrong-protected-mode-and.html) descrive i motivi tecnici per cui le impostazioni della Modalità protetta sono importanti e il motivo per cui la tua organizzazione sta sabotando attivamente la tua capacità di portare a termine il tuo lavoro se non ti permettono di cambiare le impostazioni. – JimEvans

5

provare ad aggiungere implicitamente aspettare come qui di seguito. Come ha detto Robert, l'URL dovrebbe avere http: //

WebDriver driver = new InternetExplorerDriver(ieCapabilities); 
driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS); 
+0

Ciao Nilesh, grazie mille per il tuo aiuto. Ma la soluzione non funziona per me. – user836112

+0

Ecco perché dovresti usare FluentWait con una clausola .ignoring per recuperare dalle eccezioni. – djangofan

2

Ci fu un breve FAQ entry sul sito del progetto (copiato circa Selenio 2.9):

L'InternetExplorerDriver richiede che tutti i domini di protezione sono impostate allo stesso valore (sia attendibile o non attendibile) Se siete non è in grado di modificare le domini di sicurezza, allora si può ignorare il controllo in questo modo:

DesiredCapabilities capabilities = 
DesiredCapabilities.internetExplorer(); 
capabilities.set(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, 
true); 
WebDriver driver = new InternetExplorerDriver(capabilities); 

come si può detto dal nome della costante, questo può introdurre flakine ss nei tuoi test. Se tutti i siti si trovano nello stesso dominio di protezione, è necessario impostare .

Il messaggio C# InvalidOperationException parallelo:

errore imprevisto lancio di Internet Explorer. La modalità protetta deve essere impostata sullo stesso valore (abilitato o disabilitato) per tutte le zone. (NoSuchDriver)

e il C#, invece di regolazione delle impostazioni di IE (ipotesi migliore come di febbraio 2016):

var ieOptions = new OpenQA.Selenium.IE.InternetExplorerOptions { 
       IntroduceInstabilityByIgnoringProtectedModeSettings = true }; 
using (var driver = new InternetExplorerDriver(ieOptions)) 
{ 

Questo era tutto parte del issue 1795 sulla issue tracker selenio.

+1

Per la versione C#, non sono in grado di superare una DesiredCapabilities nel costruttore di InternetExplorerDriver –

Problemi correlati