Espera explícita em selênio

Espera explícita em selênio
O selênio oferece espera para resolver os problemas de sincronização. Neste artigo, discutiremos o método de espera explícito. O método explícito mantém a execução da próxima etapa até encontrar o elemento em um determinado horário específico. Nesse conteúdo, teremos uma visão geral sobre o selênio espera e entender as vantagens da espera explícita. Este artigo implementa um exemplo básico de esperas explícitas e usa blocos de tentativa e captura para capturar a exceção.

Quais são as esperas na estrutura do selênio?

O selênio espera ajuda para resolver os problemas de sincronização. A sincronização é o processo de correspondência da "velocidade da ferramenta de automação de teste" com a velocidade do "site em teste". Nesse processo, o WebDriver executa uma determinada tarefa na página da web, mas o webElement não está carregado em "Site Under Test". Nesta situação, o webdriver joga uma "NosulementExpeção" ou "ElementNotVisibleExpecção". Existem três tipos de método de espera que são fornecidos pela estrutura de selênio.

Espera implícita

Esse tipo de espera se aplica a todos os elementos do site e é por isso que é chamado de espera global. O método implícita de quewait () é usado para chamá -lo.

Espera explícita

É um tipo de espera específico para webElement. Espera por um certo tempo para carregar o elemento específico antes de jogar uma exceção.

Espera fluente

Dá o máximo de tempo para encontrar o webElement.

O que é uma espera explícita no selênio?

O tipo de espera explícito é diferente da espera implícita. Este método de espera é mantido por um certo tempo até que uma condição específica ocorra antes de prosseguir para a próxima linha de código. É útil onde alguns elementos carregam mais rápido e alguns elementos carregam mais devagar. Por exemplo: Existem dois ou três elementos que levam de 20 a 30 segundos para carregar na página da web. Aqui, você não pode ir e mudar a espera de acordo com o tempo máximo que é levado por um dos webElement. É aí que a espera explícita faz sua parte. Espera explícito especifica a espera por esse elemento específico na página da web. Você pode especificar para esperar um elemento específico por um longo tempo; É aí que usamos a espera explícita. O método WebDriverWait é usado para chamar a espera eexplictic.

Interface de selenium webbrowser

A interface do webdriver permite a implementação do teste de automação. O WebDriver é usado para controlar e criar interação entre ferramentas de automação de site e selênio, como encontrar os elementos, navegar pelos URLs, obtendo propriedades de atributo, confirmando se o texto está lá no webElement, pesquisando um elemento e mais.

Você pode utilizar uma variedade de navegadores da web, incluindo Firefox, Safari e Chrome. Todo tipo de navegador tem uma classe específica para esse tipo de navegador como Firefoxdriver, Chromedriver, InternetexplorerDriver, etc. Todos os navegadores podem ser implementados através do método WebDriver.

Aqui está a sintaxe para usar a interface da webdriver:

do selênio importar webdriver
driver = webdriver.Cromada()
motorista.get ('https: // www.eBay.com ')

No pedaço de código fornecido, criamos o objeto "driver" do webdriver. Aqui, usamos o navegador Chrome com o método.Classe Chrome (). Depois disso, o navegador lança e abre o URL fornecido.

Exemplo 1:

Neste primeiro programa, um exemplo de espera explícito muito básico é implementado, que é muito útil para iniciantes e desenvolvedores experientes.

Existem cenários em que encontramos primeiro o webElement "OFERSOS DIÁRIOS" e navegamos até a página de ofertas diárias. Se a condição for verdadeira, imprima a “condição verdadeira”. Caso contrário, imprima a exceção “Condição falsa”.

Primeiro, importamos todas as bibliotecas necessárias de selênio e webbrowser. Para usar a espera explícita, importe as seguintes bibliotecas:

importação org.OpenQa.selênio.apoiar.Ui.Condições esperadas;
importação org.OpenQa.selênio.apoiar.Ui.WebDriverWait;

Fornecemos o código completo no seguinte:

Pacote de interface do pacote;
importar java.util.simultâneo.TimeUnit;
importação org.OpenQa.selênio.Por;
importação org.OpenQa.selênio.WebElement;
importação org.OpenQa.selênio.cromada.Cromedriver;
importação org.OpenQa.selênio.apoiar.Ui.Condições esperadas;
importação org.OpenQa.selênio.apoiar.Ui.WebDriverWait;
classe pública explicic_wait
public static void main (string [] args)
Sistema.setProperty ("WebDriver.cromada.Driver "," C: \\ BrowserDrivers \\ Chromedriver.exe");
Chromedriver Driver = new Chromedriver ();
motorista.gerenciar().janela().maximizar();
motorista.Get ("https: // www.eBay.com/");
Webdriverwait wait = novo webdriverwait (driver, duração.de segundos (10));
tentar
Elemento webElement = aguarde.Até (Condições esperadas.Visibilidade do AlementLocated (por.linkText ("negócios diários")));
elemento.clique();
Sistema.fora.println ("condição true");

Catch (Exceção e)

Sistema.fora.println (e);
Sistema.fora.println ("condição falsa");

motorista.desistir();

Agora, vamos entender o código anterior passo a passo e explicar quais ações cada linha executa.

No primeiro pedaço de código, obtemos as bibliotecas do navegador da máquina e depois lançamos os drivers do navegador Chrome.

Neste exemplo, usamos o navegador Chrome. A sintaxe a seguir é usada para implementá -lo:

Sistema.setProperty ("WebDriver.cromada.Driver "," C: \\ BrowserDrivers \\ Chromedriver.exe");
Chromedriver Driver = new Chromedriver ();

Depois disso, maximizamos a janela do navegador e abrimos o site fornecido usando a seguinte sintaxe dada:

motorista.gerenciar().janela().maximizar();
motorista.Get ("https: // www.eBay.com/");

Para este exemplo, usamos o site do eBay localizado em https: // www.eBay.coma.

Se quisermos verificar se a hiper-line "Deal Caso Daily" existe ou não, devemos saber onde o "negócio diário" está presente no site. Para encontrar o localizador LinkText do hiper-line "OFERSA DIÁRIO", precisamos inspecionar as "ofertas diárias" em particular na página da web e encontrar a tag inertext. A captura de tela está anexada a seguir para ver onde podemos encontrar a tag "Ofertas diárias".

Na captura de tela anterior, vemos que a tag de "Diário" está presente na página da web. Se não houver uma tag presente, não há hiper-line presente “diariamente '. Precisamos usar esta dica a seguir:

motorista.FindElement (por.LocatorType ("locatorValue"));

Usamos o motorista.Método findElements () para verificar se um elemento está presente em uma página da web ou não. O objeto "por" é um parâmetro para o comando de elemento encontrado que entrega um objeto do tipo webElement. As várias técnicas de localizador, como nome, ID, className, XPath, etc. O texto do link pode ser usado com o objeto "por". Como sabemos, uma lista de webElements localizados usando o parâmetro "por locator" é retornada pela função findElements (). Se o elemento for encontrado, uma lista de webElements diferentes de zero será retornada. Caso contrário, uma lista do tamanho 0 é retornada. Como resultado, a duração da lista pode ser utilizada para determinar se uma entrada está presente ou não.

Para este exemplo, usamos o localizador LinkText, como mostrado na sintaxe a seguir:

motorista.FindElement (por.LinkText ("OFERSAS DIÁRIAS")).clique();

No código de código anterior, encontre o texto de hiper-line “OFERSA DIÁRIO” primeiro. Depois disso, use a função click () para navegar para outra página.

Depois disso, a espera explícita é implementada na seguinte sintaxe:

Webdriverwait wait = novo webdriverwait (driver, duração.de segundos (10));

Quando usamos o pedaço anterior de código para a espera explícita, lembre.

O método WebDriverWait é usado para implementar explicitamente. Crie o objeto de referência "Wait" da classe WebDriverwait. Em seguida, aloque a memória com o novo WebDriverwait e passe dois parâmetros (1) objeto de referência do driver da web e mencionado (2) duração (driver, duração.de segundos (10)).

Agora, use o objeto de referência da classe WebDriverwait, que é "espera" para ligar para o método até () e aprovar a visibilidade esperada para a base locada (por.id) condição. Se a condição esperada for verdadeira, retorne o webElement e aguarde 10 segundos até que essa condição se torne realidade. Esta condição esperada é a especificação do webElement. Aqui, temos que esperar pela visibilidade do "elemento". Se o elemento estiver visível dentro de 5 segundos, aguarde saídas. Caso contrário, maximiza a espera por 10 segundos.

Aqui está a sintaxe dada para a condição esperada:

Espere.Até (Condições esperadas.Visibilidade do AlementLocated (por.id ("elemento")));

Existem muitas condições esperadas que são fornecidas pelo selênio, como alertispresent (), elementselectionStateToBe (), elementTobeclickable (), etc. Aqui neste tutorial, usamos a condição “visiblityoflementlocated ()”.

Vamos para o próximo pedaço de código onde temos a "condição verdadeira":

tentar
Elemento webElement = aguarde.Até (Condições esperadas.Visibilidade do AlementLocated (por.linkText ("negócios diários")));
elemento.clique();
Sistema.fora.println ("condição true");

Catch (Exceção e)

Sistema.fora.println (e);
Sistema.fora.println ("condição falsa");

Para verificar se o elemento existe ou não, usamos uma tentativa de captura de bloco. Tudo o que precisamos fazer é tentar encontrar o elemento e interagir com ele.

Elemento webElement = aguarde.Até (Condições esperadas.Visibilidade do AlementLocated (por.linkText ("negócios diários")));
elemento.clique();
Sistema.fora.println ("condição true");

Aguarde o elemento com o linktext de “ofertas diárias”. Se encontrarmos o webElement, clique nesse elemento para navegar para outra página e imprimir a "condição verdadeira" no console.

Aqui na captura de tela de saída a seguir, podemos ver que o elemento achado é bem -sucedido. Navegue pela página:

Vamos para o próximo pedaço de código, onde temos a “condição falsa”:

tentar
Elemento webElement = aguarde.Até (Condições esperadas.Visibilidade do AlementLocated (por.linkText ("elemento errado")));
elemento.clique();
Sistema.fora.println ("condição true");

Catch (Exceção e)

Sistema.fora.println (e);
Sistema.fora.println ("condição falsa");

Se o texto hiper-line "elemento errado" não estiver presente na página da web, jogue a exceção e imprima a saída "Condição falsa" no console.

Na captura de tela de saída a seguir, podemos ver que o elemento é encontrado sem êxito:

Finalmente, depois de executar todo o código, feche o navegador usando o método de abandono ().

motorista.desistir();

Conclusão

Você agora aprendeu sobre as vantagens de espera explícitas de selênio. Você aprenderá como implementá -lo em um cenário real. Este artigo implementa o exemplo em que você mantém a execução de mais código até encontrar o elemento em um determinado tempo de espera. Este artigo contém as condições de tentativa e captura. Se o elemento estiver saindo, imprima a “condição verdadeira”. Caso contrário, imprima a “condição falsa”.