2011-09-02 2 views
16

Actuellement, je travaille sur WebDriver pour appeler le navigateur IE afin de lancer le test. Mais j'ai reçu un NoSuchElementException quand j'ai essayé d'exécuter l'exemple simple ci-dessous. Cependant, le code fonctionnait correctement si j'utilisais le pilote Chrome ou le pilote Firefox. Toute idée ou pensée serait appréciée.NoSuchElementException est survenue lors de l'implémentation de InternetExplorerDriver dans Selenium WebDriver

Jar: selenium-server-standalone-2.5.0.jar

code:

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")); 
} 

Message d'erreur:

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

Cette piletrace/message d'erreur semble incomplète, êtes-vous sûr que c'est terminé? – Jasper

+0

Salut, mis à jour le message d'erreur :) navigateur IE a été ouvert et dirigé vers la page google. Mais, il a échoué car il a essayé de trouver l'élément "q" – user836112

+0

même question ici. J'utilise un système 64 bits, mais avec un jvm 32 bits, donc le driver est aussi en 32 bits. Rien de listé ci-dessous n'a aidé –

Répondre

14

Vous avez explicitement évité d'avoir à définir les paramètres du mode protégé de IE. C'est ce que fait le réglage de capacité InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS. Lorsque vous supprimez ce paramètre de capacité et que vous définissez les paramètres du mode protégé comme documenté dans le project wiki, il semble que le problème se résout lui-même.

+0

Salut Jim. Merci pour la solution. Je n'ai aucun privilège pour modifier les paramètres de sécurité. Y at-il un travail autour? Merci! – sbose

+0

La capacité ** est ** la solution de contournement. [Ce blog] (http://jimevansmusic.blogspot.com/2012/08/youre-doing-it-wrong-protected-mode-and.html) décrit les raisons techniques pour lesquelles les paramètres du mode protégé sont importants et pourquoi votre organisation sabote activement votre capacité à accomplir votre travail s'il ne vous permet pas de changer le réglage. – JimEvans

5

Essayez d'ajouter attendre implicitement comme ci-dessous. Aussi, comme Robert a dit, votre URL devrait avoir http: //

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

Salut Nilesh, Merci beaucoup pour votre aide. Mais, la solution ne fonctionne pas pour moi. – user836112

+0

C'est parce que vous devriez utiliser FluentWait à la place avec une clause .ignoring pour récupérer des exceptions. – djangofan

2

Il y avait une courte FAQ entry sur le site du projet (copié vers Sélénium 2.9):

Le InternetExplorerDriver exige que tous les domaines de sécurité sont définies à la même valeur (fiables ou non) Si vous êtes pas en mesure de modifier les domaines de la sécurité, vous pouvez remplacer le chèque comme ceci:

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

comme on peut le dire par le nom de la constante, cela peut introduire flakine ss lors de tes tests. Si tous les sites sont dans le même domaine de protection, devrait être correct.

Le parallèle message C# InvalidOperationException:

Erreur inattendue du lancement d'Internet Explorer. Le mode protégé doit être réglé sur la même valeur (activée ou désactivée) pour toutes les zones. (NoSuchDriver)

et C# au lieu de régler les paramètres IE (meilleure estimation que de février 2016):

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

Cela faisait partie de issue 1795 sur le suivi des problèmes de Sélénium.

+1

Pour la version C#, je ne parviens pas à transmettre un constructeur DesiredCapabilities dans InternetExplorerDriver –

Questions connexes