Possível problema com o Chromedriver 78, o Selenium não consegue encontrar o elemento da Web do PDF aberto no Chrome

17

Até o meu google Chrome não ter sido atualizado para a versão 78, meu código funcionou bem. Também atualizei o chromedriver para a versão 78.0.3904.70. Portanto, não consigo mais encontrar o WebElement com id = 'plugin' usando o Selenium WebDriver e Java:

<html>
<div id="content">
<embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&amp;reanudar=&amp;>
</div>
</html>

Fora essa parte, meus testes estão funcionando bem. Eu nunca tive um problema semelhante antes. Também tentei encontrar o WebElement id = 'content', mas estou recebendo o mesmo erro.

WebDriverWait wait = new WebDriverWait (driver, 90);
WebElement scrollvalid = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("plugin")));

scrollvalid.sendKeys(Keys.PAGE_DOWN);                       scrollvalid.sendKeys(Keys.PAGE_DOWN);

Meu script de automação deve encontrar o elemento PDF e rolar a página para baixo. Em vez disso, estou recebendo este erro: org.openqa.selenium.TimeoutException: Tempo limite esgotado após 90 segundos, aguardando a visibilidade do elemento localizado por By.id: plugin

Alguém está enfrentando um problema semelhante? Desde já, obrigado.

Misturar
fonte
Hoje, excluí a versão 78 do Google Chrome e instalei a versão 76 e meu teste de automação funciona novamente. Tudo funciona perfeitamente. Espero que esse problema da versão 78 seja corrigido. Portanto, eu estava usando o chromedriver (versão 78) e no meu arquivo .pom tenho a seguinte dependência: <dependency> <groupId> org.seleniumhq.selenium </groupId> <artifactId> selenium-chrome-driver </artifactId> <versão> 3.141.59 </version> </dependency>
Misture
Estou tendo o mesmo problema. O código que funcionava antes agora falha porque o driver da web falha ao localizar qualquer elemento da web que estou tentando localizar. Esperas implícitas e explícitas falham da mesma forma. O que não consegui identificar é o tipo de elementos com os quais está tendo problemas ou se são apenas componentes localizados dentro de um iframe. Como solução alternativa, venho adicionando Thread.sleeplugares onde havia esperas implícitas ou explícitas antes desta atualização.
hfontanez
O Chrome 78 com chromedriver 77 funciona para mim.
Yun

Respostas:

5

Corri para o mesmo problema.

Aparentemente, o Chrome se atualiza automaticamente. Ontem (29 de outubro de 1919) Meu ChromeDriver começou a reclamar que não era compatível com o Chrome 78. Atualizei o driver para a versão 78. Comecei a obter exceções aleatórias org.openqa.selenium.NoSuchElementException ao tentar encontrar elementos que confirmei que estavam lá. Os findElement [s] também funcionam quando eu usei pontos de interrupção. Eu também tentei esperas implícitas, com apenas sucesso limitado.

Tentei a solução ChromeOption do zsbappa, mas sem alegria.

O Google torna difícil obter versões antigas do Chrome, mas eu encontrei a versão 76 em https://www.neowin.net/news/google-chrome-76-offline-installer/ . Cuidado, o instalador online instala a versão mais recente. Voltei ao motorista para 76 e está tudo bem. Todos os meus testes de selênio estão funcionando novamente.

Minha conclusão é que o Chrome 78 e seu driver associado têm uma condição de corrida em que o Selenium tenta interrogar a página da web antes que ela seja concluída.

wdtj
fonte
Abri o problema 3198 com os desenvolvedores do ChromeDriver.
Wdtj 30/10/19
11
Recebi a seguinte resposta ao meu problema: Obrigado por denunciar este problema. A partir da versão 77, o Chromedriver não espera que os quadros ou iframes sejam carregados ao navegar para uma nova página ou ao alternar entre janelas. Isso introduz a necessidade de espera de código para que os recursos estejam disponíveis. A maioria das ligações possui uma espera explícita e as configurações implícitas de espera. Pesquise WebDriverWait na documentação do Selenium para obter mais informações.
Wdtj # /
Mas estamos usando esperas explícitas e isso não ajuda. Ajuda na alteração de iframes, mas as tags HTML não são mais visíveis para o pdf incorporado.
Misture
Abri um novo problema no grupo chromedriver
Mix
Você pode usar o Chromium para testes, é uma versão básica do Chrome sem os serviços do Google, não se atualiza e funciona bem com o Chromedriver: chromium.org/getting-involved/download-chromium
Blaise
3

Nós enfrentamos um problema semelhante com o Chrome 78.0.3904.7, Chromedriver 77/78, Python Selenium 3.141.0.

Em nossos testes automatizados do Python Selenium, vimos várias falhas em que parece que os cliques nos elementos não ocorreram. Ainda mais estranho, parece que o elemento se tornou ativo (como se estivesse prestes a ser clicado), mas o evento de clique real nunca ocorreu. Como resultado, trocas de página etc. não ocorrem, resultando em várias falhas a jusante.

Por um processo de rastreamento e erro, descobrimos que o uso da função .click () padrão agora não é confiável:

webdriver_element.click()

Mas o uso de cadeias de ação parece ser confiável:

ActionChains(context.browser).click(webdriver_element).perform()

Não está claro por que esse é o caso. As falhas começaram assim que atualizamos para o Chrome 78.0.3904.7. Estamos usando o Chromedriver 77.0.3865.90, mas os mesmos testes são confiáveis ​​nas versões do Chrome 77.x, portanto, parece que algo está errado ou mudou no Chrome 78.

Oli Boorman-Humphrey
fonte
Isso me ajudou um pouco, obrigado.
Piedone 20/04
1

Adicionando o argumento a seguir, resolvi meu problema.

   ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-gpu");
    options.addArguments("--disable-extensions");
    options.setExperimentalOption("useAutomationExtension", false);
    options.addArguments("--window-size=1920,1080");
    options.merge(seleniumCapabilities);
    driver = new ChromeDriver(options);
zsbappa
fonte
Oi @zsbappa! Obrigado por sua resposta. No entanto, isso não resolve o meu problema. O problema é que o chromedriver (versão 78) não consegue encontrar nenhum elemento da web em pdf incorporado. Essa funcionalidade funcionou bem até o Google chrome não ser atualizado para a versão 78. PS: NÃO estou executando meus testes no modo sem cabeça
Misture
Não está claro como essas opções resolvem o problema dos OPs.
Cal Corbin
Isso não resolve o problema. Provavelmente, você está executando cenários em que o elemento da web não está localizado dentro de um iframe.
hfontanez
1

Eu enfrentei o mesmo problema ao tentar acessar uma guia dentro de um iframe, ele funcionava bem na versão 76. Agora que foi atualizado para 78, está falhando. Tentei esperas, esperas implícitas, durma, localize os elementos usando xpath, CSS, id, alterne contexto, role até a visualização, etc., sem sorte. Estou usando o Windows 10, 1809. Não sei se isso está acontecendo em outro sistema operacional.

Aqui está a pergunta que levantei:

Problema ao usar localizadores chromedriver 78.0.3904.70

DavidRYV
fonte
1

Confirmei ontem que esse problema parece se manifestar apenas quando um elemento está contido em um iframe. Nesses casos, o iframe está localizado corretamente. No entanto, a tentativa de localizar um elemento da Web usando os objetos de espera do driver ou do driver da Web resultará em um NoSuchElementou TimeoutExceptionrespectivamente.

Forneci à equipe do chromedriver um registro detalhado do driver do Chrome e eles estão trabalhando nisso.

ATUALIZAÇÃO : da edição 3223 do chromedriver

Os logs mostram que a execução finalContextCreated para o quadro não é concluída até que o FindElement retorne nulo. A partir da versão 77, o ChromeDriver parou de aguardar o carregamento de todos os quadros antes de continuar a navegação. Infelizmente, essa alteração impediu a espera do carregamento do quadro atual. O 3164 aguardará o carregamento do quadro atual; isso deve impedir que o FindElement procure antes que o quadro tenha parado de carregar e o ExecutionContext seja criado.

Basicamente, esse bug foi introduzido na v.77. Muitos de nós acabamos de perceber esse problema porque atualizamos da v.76 para .v78. A palavra é que eles estão direcionando uma correção para .v80 (não para a v. 79). Como solução alternativa, estou usando Thread.sleepo tempo que alterno para o iframe e quando tento localizar o componente. Esta solução alternativa funciona bem. Na verdade, você pode verificar isso sozinho executando o aplicativo no modo DEBUG. Ao pausar a execução (usando um ponto de interrupção), você notará que seu código original (sem suspensão) funciona bem.

hfontanez
fonte
0

Por exemplo: você pode tentar usar essas palavras-chave!

1. implicit_wait=10
2. Sleep  10
Narasimhamurthy GN
fonte
Olá @Narasimhamurthy GN, obrigado pela sua resposta. A espera explícita não é um problema, estou usando as esperas explícitas em todos os meus testes e não estou enfrentando um problema semelhante. O problema é que o chromedriver (versão 78) não consegue encontrar nenhum elemento da web em pdf incorporado.
Misture
Para mim, alguns casos de teste também enfrentaram o mesmo problema, quando usei o "geckodriver" (Firefox).
Narasimhamurthy GN
caso contrário, use uma palavra-chave diferente do localizador de bibliotecas de selênio para encontrar o WebElement.
Narasimhamurthy GN
Infelizmente, é recomendável que os usuários do nosso aplicativo da Web usem o Chrome ou o Internet Explorer; o Firefox não é recomendado por algum motivo. É por isso que não consigo usar o Firefox para automatizar os testes. Tentei usar todas as formas possíveis para encontrar qualquer elemento da web em pdf usando selênio, mas não funciona. Eu também tentei usar diferentes dependências e cromedrivers e nada funciona.
Misture
0

Eu tive o mesmo problema.

Após a atualização automática do Chrome com a versão 78.0, meus scripts de teste automatizados estavam falhando. Atualizei o chromedriver para a versão 78, mas o driver ainda não conseguiu encontrar nenhum elemento da web. Depois disso, tentei com várias versões do chromedriver e, finalmente, meu problema foi resolvido com a versão 2.44 do chromedriver .

Esta versão pode ser encontrada em https://chromedriver.storage.googleapis.com/index.html?path=2.44/

Sagar Bhavsar
fonte
-1

Você pode gerenciar o pacote Nuget , excluir a unidade do Chrome e procurar o chrome, fazer o download da nova versão selenium.web.driver.ChromeDriver >> para jsaKamoto

aí você encontra a versão 78 do chrome.

Thiago
fonte
Obrigado pela resposta, mas ele realmente não responder ao problema das excepções NoSuchElement em cromo versão 78.
wdtj