Étant donné: Tentative d'utilisation d'un RemoteWebDriver en C # avec ce code.

var url = new Uri("http://localhost:4444/wd/hub");
var wd = new RemoteWebDriver(url, DesiredCapabilities.Chrome());

Le nouveau code RemoteWebDriver ci-dessus ne répond pas jusqu'à ce qu'il y ait un délai d'expiration ...

Plus de détails

J'ai démarré mon Hub avec ces paramètres sur le serveur Selenium:

-jar "C:\SomeFolder\selenium-server-standalone-3.0.1.jar" -port 4444 -role hub

Et a enregistré un nœud à l'aide de ces paramètres.

-jar "C:\SomeFolder\selenium-server-standalone-3.0.1.jar" -role node -hub http://localhost:4444/grid/register -port 9662 

Débogage

Si je tape cette URL après le démarrage du hub, cela montre qu'il y a un nœud enregistré:

http: // emplacement: 4444 / grid / console

Mais lors de la saisie de cette URL après le démarrage du Hub

http://localhost:4444/wd/hub

Le navigateur affiche cette trace de pile java (json) pointant vers ExternalSessionKey.java

{"status":13,"value":{"class":"java.lang.NullPointerException","stackTrace":[{"fileName":"ExternalSessionKey.java","className":"org.openqa.grid.internal.ExternalSessionKey","methodName":"fromWebDriverRequest","lineNumber":77},{"fileName":"WebDriverRequest.java","className":"org.openqa.grid.web.servlet.handler.WebDriverRequest","methodName":"extractSession","lineNumber":62},{"fileName":"RequestHandler.java","className":"org.openqa.grid.web.servlet.handler.RequestHandler","methodName":"getSession","lineNumber":231},{"fileName":"RequestHandler.java","className":"org.openqa.grid.web.servlet.handler.RequestHandler","methodName":"process","lineNumber":118},{"fileName":"DriverServlet.java","className":"org.openqa.grid.web.servlet.DriverServlet","methodName":"process","lineNumber":83},{"fileName":"DriverServlet.java","className":"org.openqa.grid.web.servlet.DriverServlet","methodName":"doGet","lineNumber":61},{"fileName":"HttpServlet.java","className":"javax.servlet.http.HttpServlet","methodName":"service","lineNumber":687},{"fileName":"HttpServlet.java","className":"javax.servlet.http.HttpServlet","methodName":"service","lineNumber":790},{"fileName":"ServletHolder.java","className":"org.seleniumhq.jetty9.servlet.ServletHolder","methodName":"handle","lineNumber":808},{"fileName":"ServletHandler.java","className":"org.seleniumhq.jetty9.servlet.ServletHandler","methodName":"doHandle","lineNumber":587},{"fileName":"SessionHandler.java","className":"org.seleniumhq.jetty9.server.session.SessionHandler","methodName":"doHandle","lineNumber":221},{"fileName":"ContextHandler.java","className":"org.seleniumhq.jetty9.server.handler.ContextHandler","methodName":"doHandle","lineNumber":1127},{"fileName":"ServletHandler.java","className":"org.seleniumhq.jetty9.servlet.ServletHandler","methodName":"doScope","lineNumber":515},{"fileName":"SessionHandler.java","className":"org.seleniumhq.jetty9.server.session.SessionHandler","methodName":"doScope","lineNumber":185},{"fileName":"ContextHandler.java","className":"org.seleniumhq.jetty9.server.handler.ContextHandler","methodName":"doScope","lineNumber":1061},{"fileName":"ScopedHandler.java","className":"org.seleniumhq.jetty9.server.handler.ScopedHandler","methodName":"handle","lineNumber":141},{"fileName":"HandlerWrapper.java","className":"org.seleniumhq.jetty9.server.handler.HandlerWrapper","methodName":"handle","lineNumber":97},{"fileName":"Server.java","className":"org.seleniumhq.jetty9.server.Server","methodName":"handle","lineNumber":499},{"fileName":"HttpChannel.java","className":"org.seleniumhq.jetty9.server.HttpChannel","methodName":"handle","lineNumber":310},{"fileName":"HttpConnection.java","className":"org.seleniumhq.jetty9.server.HttpConnection","methodName":"onFillable","lineNumber":257},{"fileName":"AbstractConnection.java","className":"org.seleniumhq.jetty9.io.AbstractConnection$2","methodName":"run","lineNumber":540},{"fileName":"QueuedThreadPool.java","className":"org.seleniumhq.jetty9.util.thread.QueuedThreadPool","methodName":"runJob","lineNumber":635},{"fileName":"QueuedThreadPool.java","className":"org.seleniumhq.jetty9.util.thread.QueuedThreadPool$3","methodName":"run","lineNumber":555},{"className":"java.lang.Thread","methodName":"run","lineNumber":-1}]}}

Quelqu'un peut-il interpréter le Stack Trace à ma place et que faire pour que cela fonctionne?

Merci!

7
John Peters 16 janv. 2017 à 21:31

2 réponses

Meilleure réponse

Le symptôme du problème était une exception de délai de connexion dans ce code.

var url = new Uri("http://localhost:4444/wd/hub");
var wd = new RemoteWebDriver(url, DesiredCapabilities.Chrome());

Cause fondamentale

Cela a été causé parce que, pendant ma session de débogage; J'ai terminé le programme avant cette déclaration:

wd.Quit();

Étant donné que mon concentrateur a été configuré pour un seul nœud, la session de débogage précédente avait toujours une session orpheline sur le concentrateur. Le redémarrage du Hub a résolu ce problème, mais il est également possible de configurer autant de nœuds que l'on souhaite.

Un autre défaut de la logique du concentrateur est que les nœuds orphelins ne sont pas nettoyés dans le délai imparti défini dans la configuration. Cela oblige les nœuds orphelins à rester en vie bien plus longtemps que le délai d'expiration ne le suggère ... Consultez les options de configuration pour voir par vous-même. Il devrait y avoir une minuterie d'inactivité qui dit "si aucune activité dans x secondes" tue la session.

Une solution

Assurez-vous que (au minimum) vous configurez vos hubs pour autoriser davantage de nœuds dont vous avez besoin lors du débogage de votre solution.

2
John Peters 8 juil. 2017 à 15:15

Il n'y a rien de mal à votre fin.

L'URL http://localhost:4444/wd/hub est conçue de telle sorte qu'elle attend une CHARGE PAYEE avec votre opération. Puisque vous n'avez pas fourni la charge utile souhaitée, vous voyez une NullPointerException.

Cette URL n'est pas censée être ouverte dans un navigateur. Il est destiné à être utilisé via des opérations Http avec une charge utile appropriée conforme à la spécification Selenium w3c

14
Krishnan Mahadevan 17 janv. 2017 à 03:26