Pregunta Selenium RemoteWebDriver c # - System.InvalidOperationException


Tengo un proyecto de prueba de interfaz de usuario usando v3.4.0 de Selenium.WebDriver.

Todo funciona bien cuando ejecuto las pruebas contra un controlador local, pero quiero que las cosas funcionen con Selenium Grid 2.

Tan pronto como trato de crear una instancia de un nuevo RemoteWebDriver obtengo una excepción con pocos detalles.

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

Nota: GridUrl es "http: // localhost: 4444 / wd / hub"

Lanza una System.InvalidOperationException con StackTrace de la siguiente manera:

   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

Configuración del concentrador

Tengo v3.4.0 del concentrador ejecutándose localmente con la siguiente configuración:

{
  "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 comenzó con:

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

Esto ha salido bien y parece estar en ejecución. working hub console

Configuración del nodo

He intentado varios nodos (chromedriver.exe, IEDriverServer.exe y geckodrvier.exe). Ninguno de estos funciona con RemoteWebDriver. Todos ellos están en un directorio que se ha agregado a la variable PATH de mi sistema.

Configuración de 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": {}
}

El nodo comenzó con:

java -jar selenium-server-standalone-3.4.0.jar -role node -nodeConfig chromeNodeConfig.json

Las otras configuraciones de nodos son básicamente las mismas excepto por los diferentes nombres y puertos de navegador.

Una vez que se hayan iniciado todos los nodos, la consola se verá de la siguiente manera: console with nodes running

No puedo obtener mucho de la excepción. ¿Es un problema de control de versiones de los controladores que tengo? He intentado personalizar mis Capacidades Deseadas para asegurarme de que coincido con las de la configuración del nodo. Todo eso se ve bien.


Actualizar

Como solicité, estoy agregando un poco más de detalles sobre cómo estoy tratando de iniciar un navegador. Ninguno de los navegadores funciona con RemoteWebDriver, mientras que lo hacen con los controladores locales. Mostrando el ejemplo de Chrome: la única diferencia entre cada uno está relacionada con las Capacidades que paso al constructor de la clase base.

En mi clase de prueba

[TestClass]
public class PersonTests : PersonTestBase
{
    public PersonTests() 
        : base(DesiredCapabilities.Chrome())
    {
    }

    [TestCategory("Chrome")]
    [TestMethod]
    public void Chrome_ShouldCreatePlacement()
    {
        this.ShouldCreatePerson();
    }        
}

En mi clase base estoy haciendo lo siguiente

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
2018-05-03 16:16


origen


Respuestas:


Degradación a 3.3.0 hasta este problema se resuelve y una nueva versión de Selenium Standalone Server está disponible (Solución recomendada)

O

  1. Descargar el Solución
  2. Comentario esta línea
  3. Construir enlaces de lenguaje dotnet
    • Abrir la ventana de comandos en el directorio raíz
    • correr go //dotnet:release
    • Y haga referencia a los binarios construidos en {root} / build / dotnet / dist

Nota: esta solución alternativa NO arreglar cualquier cosa! Ignora la parte del código de cuadrícula de selenio que causa el error.

Otra nota: tenga en cuenta que la actualización a Selenium 3.4 puede requerir la actualización de los controladores web también


11
2018-05-05 19:47



V3.5.1 soluciona este problema

Actualice su paquete Selenium NuGET usando NuGET manager y su jar de selenio independiente.


1
2017-08-16 05:57



La degradación a 3.3.0 como sugirió Stephen puede causar problema. Pruebe la degradación a v3.3.1 en su lugar.

Puede obtener la v3.3.1 desde aquí: http://selenium-release.storage.googleapis.com/index.html?path=3.3/


0
2018-06-12 01:25