web-dev-qa-db-fra.com

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 souhaite 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(String 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 - concentrateur de rôles

Cela a bien fonctionné et semble fonctionner .  working hub console

Configuration du noeud

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 qui a été ajouté à ma variable système PATH.

Config 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 que tous les nœuds sont démarrés, la console se présente comme suit:  console with nodes running

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, seule la différence entre les capacités 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 string TargetUrl;
    protected string 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
    }
}
10
obaylis

Passez à 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. Commentaire cette ligne
  3. Construire des liaisons en langage dotnet
    • Ouvrir la fenêtre de commande dans le répertoire racine
    • Exécuter go //dotnet:release
    • Et référencez les binaires construits dans {root}/build/dotnet/dist

Remarque: cette solution de contournement ne résout rien ! Il ignore l'élément de code de grille 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.

11

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.

1
DenisD

Rétrograder à la version 3.3.0 comme suggéré par Stephen peut provoquer un problème connu sous le nom de issue . Essayez de passer à la version 3.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/

0
Rukshod