Do blog

Início / Blog / Controle de qualidade automatizado: Uma solução inteligente para evitar erros de referência de elementos obsoletos

Controle de qualidade automatizado: Uma solução inteligente para evitar erros de referência de elementos obsoletos

Erro de referência de elemento obsoleto Imagem do blog

Resumo: O engenheiro de controle de qualidade do number8, Derick Arzu, fornece soluções para desenvolvedores que encontram um erro de referência de elemento obsoleto no Selenium WebDriver.

 

Você acabou de escrever um teste usando a estrutura do WebDriver e está confiante de que ele está completo. Você vai testá-lo e....falha com o temido erro de referência de elemento obsoleto. Qual é a sua jogada?

De acordo com MDN, o site oficial da Mozilla para documentação de desenvolvimento de padrões da Web, O erro ocorre porque você está tentando executar uma ação em um elemento da Web que faz referência a um elemento que não está mais anexado ao DOM.

Diversos cenários podem acionar esse comportamento na página da Web. Não se espera que ele esteja na página, portanto, é uma prática recomendada evitar tentar executar uma ação com esse elemento da Web. No entanto, há eventos que podem acionar a substituição de um elemento, fazendo com que o elemento da Web que o representa se torne obsoleto. Esse último é o cenário que discutiremos.

Se você for como eu, ao se deparar com um erro, recorrerá à Internet para obter ajuda. Uma pesquisa rápida lhe dirá para resolver esse problema tentando novamente em um loop. Não é uma ótima solução, mas os engenheiros de controle de qualidade ainda a usarão porque, bem, ela funciona. No entanto, eu o aconselho a estar ciente das possíveis armadilhas associadas a essa abordagem. O loop pode ser infinito, dependendo da implementação. Isso pode ser facilmente resolvido estabelecendo-se um limite, mas essa abordagem ainda não é dimensionável. Isso exigiria que você duplicasse uma grande quantidade de código que inclui um loop e um bloco try catch.

Agora, temos um problema que não pode ser resolvido tão facilmente.

Veja este código do Selenium.NET como exemplo:

Erro de referência de elemento obsoleto no código Selenium .NET

Você pode notar as possíveis armadilhas mencionadas acima. Por exemplo, ele pode entrar em loop indefinidamente porque não há controle no caso de o elemento estar sempre desatualizado. Além disso, ainda precisaremos repetir esse código para ações adicionais como .GetAttribute, .IsEnabled, Texto o que criará nosso problema de escalabilidade.

Se você voltar à definição de erro de referência de elemento obsoleto em MDNSe você estiver usando o WebDriver, verá que ele menciona um UUID, que o WebDriver usa para identificar cada elemento que busca. Esse UUID muda sempre que um elemento é alterado. Quando um elemento passa de não obsoleto para obsoleto e volta a não obsoleto novamente, mudança está acontecendo, certo? Entender isso é fundamental para o desenvolvimento de uma solução mais escalável para evitar o erro de referência de elemento obsoleto.

Primeiro, você precisa ter certeza de que tem acesso a esse UUID na estrutura que está usando. No Selenium.NET, ele está disponível por meio da opção ToString() do método IWebElement interface. Em seguida, você deve descobrir qual ação aciona a substituição do elemento com o qual você está tentando interagir. Essa etapa é fundamental porque define um antes e um depois e o ajudará a entender melhor o aplicativo, o que é uma vitória para você como parte da equipe de controle de qualidade. Agora que você identificou o ponto de virada, salve o UUID do elemento antes desse comando.

Por fim, você deve encontrar uma maneira de limitar a avaliação desse UUID. Você pode optar por limitar por quantidade de iterações ou por tempo. Como as alterações do elemento ocorrem ao longo do tempo, talvez o tempo seja o melhor caminho a seguir. No Selenium.NET, a função WebDriverWait ajudará, pois você pode especificar uma classe tempo limite limite.

O código no Selenium seria parecido com este:

Solução de erro de referência de elemento obsoleto no código Selenium .NET

Isso resolve as duas armadilhas porque tem um limite e uma exceção de tempo limite. Após a implementação dessas linhas, você estará seguro para interagir com o elemento. É perfeito? Talvez não, ainda pode haver alguns problemas de dimensionamento, mas a maioria deles pode ser facilmente resolvida independentemente de sua arquitetura.  

 

Imagem do autor Derick Arzu

Sobre o autor:

Derick Arzu é Engenheiro de software na number8 com ampla experiência em automação de controle de qualidade. Ele tem conhecimento em Selenium WebDriver, WebdriverIO, Protractor.js, NUnit, Mocha.js, Cucumber.js e Chai.js. Você pode acompanhá-lo seguindo seu blog em https://derickarzu.dev/

 

 

Deseja adicionar um engenheiro de automação de controle de qualidade experiente à sua equipe?

O number8 pode ajudar com isso. Conecte-se conosco hoje mesmo ou continue explorando todos os nossos desenvolvimento de software personalizado e serviços de automação de controle de qualidade.

Vamos trabalhar juntos

Forneça suas informações para conversar com um executivo de contas da number8 sobre suas necessidades de desenvolvimento hoje mesmo e sinta como é ser ouvido antes de ser vendida uma solução.

Permita-nos ajudá-lo a agregar profissionais altamente qualificados, desenvolvedores versáteis para a sua equipe.

Direitos autorais © 2023-2024 number8. Todos os direitos reservados.