Temos um conjunto de regressão que executamos no Chrome com código criado no Visual Studio/C# e Selenium.
Parte do código de inicialização é mostrado abaixo
protected static ChromeDriver? Driver { get; set; } = null;
Driver = new ChromeDriver(service, options, TimeSpan.FromSeconds(MaxWait));
Driver.ExecuteCdpCommand(
"Emulation.setTimezoneOverride",
new Dictionary<string, object>
{
["timezoneId"] = "Europe/London"
});
O ExecuteCdpCommand é para garantir certa execução de teste no horário do Reino Unido ao executar com um pipeline do Azure e isso funciona muito bem. Mas agora vamos executar a regressão noturna no Chrome uma noite, depois no Edge e depois no Chrome novamente etc etc e tudo está sendo executado, exceto a parte do ExecuteCdpCommand.
Então agora temos
protected static WebDriver? Driver { get; set; } = null;
Driver = new ChromeDriver(service, options, TimeSpan.FromSeconds(MaxWait));
or (depending on day of week)
Driver = new EdgeDriver(service, options, TimeSpan.FromSeconds(MaxWait));
E isso retorna o seguinte erro do compilador
'WebDriver' does not contain a definition for 'ExecuteCdpCommand' and no accessible extension method 'ExecuteCdpCommand' accepting a first argument of type 'WebDriver' could be found (are you missing a using directive or an assembly reference?)
O que é bem chato porque, tirando esse problema, estamos prontos para prosseguir. Alguém tem uma solução para esse pequeno problema, por favor?
O
ExecuteCdpCommand
método parece ser definido nas classes filhas concretas: ChromeDriver e EdgeDriver. Depois que você converte o objeto driver para aWebDriver
classe abstrata, esse método não está mais disponível. É aqui que um pouco de copiar e colar é perdoável. Você precisará inicializar ambos os drivers como seus tipos concretos e retornar os drivers totalmente inicializados antes de atribuí-los àprotected static WebDriver? Driver
propriedade. Pode ser tão simples quanto dois métodos estáticos, um para o Chrome e outro para o Edge:Agora, dependendo das condições que você decidir, ligue
CreateChromeDriver()
ouCreateEdgeDriver()
.