Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Utilização do Edge Driver

Alguém já utilizou o driver do Edge para testes com Selenium?

Na aula foi utilizado como exemplo o driver do Chrome e decidi tentar com o do Edge para experimentar porém tanto com o pacote Selenium.WebDriver.MicrosoftDriver quanto com o pacote Microsoft.Edge.SeleniumTools não tive sucesso.

Nas 2 tentativas passei o local do build no construtor da classe EdgeDriver para ele utilizar o executável. Em uma delas notei que o MicrosoftWebDriver.exe encontrava-se lá e na outra adicionei o msedgedriver.exe no projeto e configurei para ele copiar para a pasta de build, qual vi que estava lá também depois que falhou essa tentativa.

4 respostas
solução!

Olá Carlos, tudo bem?

Qual Edge está instalado no seu pc? Tem o Edge que foi baseado no projeto do IE e tem o que é feito em cima do Chromium. Neste link tem mais informações sobre a versão Chromium.

Tente instalar essa nova versão e tente fazer o teste. Os planos da Microsoft é utilizar essa versão como padrão.

No aguardo!

Olá Fabiano! Tudo bem e com você?

O Edge no meu PC é baseado no Chromium, versão 85.0.564.51 - 64 bits.

Refiz novamente a implementação e funcionou! Acho que devo ter cometido um erro, notei que estava fazendo uso do pacote alpha do Selenium.WebDriver e também do Microsoft.Edge.SeleniumTools para a versão 3 do Selenium. Não faz sentido pelo que entendi, já que um é dedicado para a versão 3 e outro para a versão 4.

Desinstalei os pacotes e mantive somente o alpha do Selenium.WebDriver. Com a versão do msedgedriver.exe que já fazia uso conforme a versão do meu Edge, utilizei a implementação abaixo

   public class CaelumHome : IDisposable
    {
        private readonly IWebDriver driver;

        public CaelumHome() => driver = new EdgeDriver(options: new EdgeOptions { UseChromium = true });

        [Fact]
        public void DeveApresentarPaginaQuandoNavegarParaEnderecoDaHome()
        {
            driver.Navigate().GoToUrl("https://www.caelum.com.br");

            Assert.Contains("Caelum", driver.Title);
        }

        public void Dispose() => driver.Quit();
    }

E funcionou! A única coisa que me deixou curioso foi que sem usar a propriedade BynaryLocation da classe EdgeOptions ele localiza o msedgedriver.exe na pasta bin do projeto de Teste. Contudo, para efeito de exemplo, se atribuo para a essa propriedade a instrução abaixo:

BinaryLocation = $"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\\msedgedriver.exe"

Ele lança essa exceção:

Message: 
    OpenQA.Selenium.WebDriverException : unknown error: MSEdge failed to start: was killed.
      (unknown error: DevToolsActivePort file doesn't exist)
      (The process started from msedge location C:\Users\carlos-nogueira\source\repos\Caelum.SeleniumTests\Caelum.SeleniumTests\bin\Debug\netcoreapp3.1\msedgedriver.exe is no longer running, so MSEdgeDriver is assuming that MSEdge has crashed.)
  Stack Trace: 
    RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
    RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
    RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
    RemoteWebDriver.ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
    ChromiumDriver.ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
    EdgeDriver.ctor(EdgeDriverService service, EdgeOptions options, TimeSpan commandTimeout)
    EdgeDriver.ctor(EdgeDriverService service, EdgeOptions options)
    EdgeDriver.ctor(EdgeOptions options)
    CaelumHome.ctor() line 14

Não deveria surtir o mesmo efeito da mesma forma quando não atribui valor para BinaryLocation e ele conseguiu localizar o msedgedriver.exe na pasta bin?

As vezes pode ser que o executável que era copiado para a pasta do msedgedriver.exe estava em uma versão diferente. Provavelmente eu teria algum problema deste tipo, porque utilizo a versão Dev, que tem atualizações semanais e isso pode ocorrer alguma quebra por causa da atualização semanal. Talvez pudesse estar com o navegador em uma versão mais "antiga" e incompatível. Mas no seu caso provavelmente não era, já que estava usando a versão compatível.

Pelo stack trace o MSEdgeDriver assumiu que o MSEdge parou de funcionar e isso é meio estranho. Talvez seja obrigatório dizer que é para usar o executável na pasta, e o servidor reconhece que tem o executável, mas ele não roda se não ficar explícito na criação do objeto. Ou seja, localizou, mas não estava rodando e causou o crash.

Será que não foi isso?

Sim, pode ser isso sim. Eu irei depois tentar baixar o código e averiguar qual é esse problema.