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
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 .
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.
{
"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:
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.
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
}
}
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
go //dotnet:release
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.
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 à 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/