Selenium RemoteWebDriver c # – System.InvalidOperationException

J’ai un exemple de projet de test d’interface utilisateur utilisant la v3.4.0 de Selenium.WebDriver.

Tout fonctionne bien lorsque je lance les tests sur un pilote local, mais je veux que tout fonctionne correctement avec Selenium Grid 2.

Dès que j’essaie d’instancier un nouveau RemoteWebDriver, je reçois une exception avec peu de détails.

Driver = new RemoteWebDriver(new Uri(GridUrl), Capabilities); 

Remarque: GridUrl est ” http: // localhost: 4444 / wd / hub “.

Lance une exception System.InvalidOperationException avec StackTrace comme suit:

  at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse) at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(Ssortingng driverCommandToExecute, Dictionary`2 parameters) at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities) at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(Uri remoteAddress, ICapabilities desiredCapabilities) at xxxx.Ui.Tests.SeleniumTests.TestInitialize() in C:\Users\xxxx\Documents\Visual Studio 2015\Projects\xxxx.Ui.Tests\xxxx.Tests\PersonTests.cs:line 38 

Configuration du hub

J’ai la v3.4.0 du hub s’exécutant localement avec la configuration suivante:

 { "port": 4444, "newSessionWaitTimeout": -1, "servlets" : [], "withoutServlets": [], "custom": {}, "capabilityMatcher":"org.openqa.grid.internal.utils.DefaultCapabilityMatcher", "throwOnCapabilityNotPresent": true, "cleanUpCycle": 5000, "role": "hub", "debug": false, "browserTimeout": 0, "timeout": 1800 } 

Hub a commencé avec:

java -jar selenium-server-standalone-3.4.0.jar -role hub

Cela s’est bien passé et semble fonctionner. console de travail

Configuration du nœud

J’ai essayé un certain nombre de nœuds (chromedriver.exe, IEDriverServer.exe et geckodrvier.exe). Aucune de celles-ci ne fonctionne avec RemoteWebDriver. Tous se trouvent dans un répertoire ajouté à la variable PATH de mon système.

Configuration chrome

 { "capabilities": [ { "browserName": "chrome", "maxInstances": 5, "seleniumProtocol": "WebDriver" } ], "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "maxSession": 5, "port": 5556, "register": true, "registerCycle": 5000, "hub": "http://localhost:4444", "nodeStatusCheckTimeout": 5000, "nodePolling": 5000, "role": "node", "unregisterIfStillDownAfter": 60000, "downPollingLimit": 2, "debug": false, "servlets" : [], "withoutServlets": [], "custom": {} } 

Le noeud a commencé avec:

java -jar selenium-server-standalone-3.4.0.jar -rôle noeud -nodeConfig chromeNodeConfig.json

Les autres configurations de nœuds sont sensiblement les mêmes, à l’exception des noms de navigateur et des ports.

Une fois tous les nœuds démarrés, la console se présente comme suit: console avec noeuds en cours d'exécution

Je ne peux pas obtenir beaucoup de l’exception. Est-ce un problème de version des pilotes que j’ai? J’ai essayé de personnaliser Mes DesiredCapabilities pour m’assurer de correspondre à celles de la configuration de nœud. Tout cela a l’air bien.


Mettre à jour

Comme demandé, j’ajoute un peu plus de détails sur la façon dont je tente de lancer un navigateur. Aucun des navigateurs ne fonctionne avec RemoteWebDriver, contrairement aux pilotes locaux. En montrant l’exemple de Chrome, la seule différence entre les deux concerne les capacités que je transmets au constructeur de la classe de base.

Dans ma classe de test

 [TestClass] public class PersonTests : PersonTestBase { public PersonTests() : base(DesiredCapabilities.Chrome()) { } [TestCategory("Chrome")] [TestMethod] public void Chrome_ShouldCreatePlacement() { this.ShouldCreatePerson(); } } 

Dans ma classe de base, je fais ce qui suit

 public abstract class PersonTestBase { protected IWebDriver Driver; protected ICapabilities Capabilities; protected ssortingng TargetUrl; protected ssortingng GridUrl; protected PersonTests(ICapabilities capabilities) { this.Capabilities = capabilities; } [TestInitialize] public void TestInitialize() { TargetUrl = "http://urlOfMyWebsite"; GridUrl = "http://localhost:4444/wd/hub" Driver = new RemoteWebDriver(new Uri(GridUrl), Capabilities); } [TestCleanup] public void TestCleanup() { Driver.Quit(); } protected void ShouldCreatePerson() { Driver.Navigate().GoToUrl(TargetUrl); //rest of test code ommitted } } 

    Passez à la version 3.3.0 jusqu’à ce que ce problème soit résolu et qu’une nouvelle version de Selenium Standalone Server soit disponible (solution recommandée)

    Ou

    1. Télécharger la solution
    2. Commentez cette ligne
    3. Construire des liaisons en langage dotnet
      • Ouvrir la fenêtre de commande dans le répertoire racine
      • Run go //dotnet:release
      • Et référencez les binarys construits dans {root} / build / dotnet / dist

    Remarque: cette solution de contournement ne résout rien! Il ignore l’élément de code de selenium qui provoque une défaillance.

    Autre remarque: sachez que la mise à niveau vers Selenium 3.4 peut également nécessiter la mise à niveau des pilotes Web.

    V3.5.1 Résout ce problème.

    Mettez à niveau votre paquet Selenium NuGET à l’aide de NuGET Manager et de votre bocal selenium autonome.

    Rétrograder à 3.3.0 comme suggéré par Stephen peut causer un problème connu. Essayez de passer à la v3.3.1 à la place.

    Vous pouvez obtenir la v3.3.1 à partir d’ici: http://selenium-release.storage.googleapis.com/index.html?path=3.3/