Vamos discutir e aprender o uso exaustivo da classe Actions no Selenium em diferentes operações da web. A classe Actions no Selenium é amplamente usada para realizar várias operações na web, como movimentos do mouse e do teclado, que são ações avançadas do navegador da web.
Ações do mouse
Ações de teclado
Aula de ações em selênio
O que é a classe Actions no Selenium:
A classe Actions é uma classe do Selenium Bundle Api do pacote org.openqa.selenium.interactions para lidar com interações críticas e avançadas da Web com usuários por meio da automação do navegador. Fornece aos usuários uma alça para realizar várias ações de mouse e teclado por meio de diferentes métodos mencionados acima.
Discutiremos aqui todas as interações da Web por meio da classe Actions no Selenium, para começar com Aprendemos as interações do mouse e avançamos para a classe Interações do teclado com ações no Selenium.
Interações do mouse - classe de ações no Selenium
Arraste e solte no selênio
Arrastar e soltar no Selenium pode ser feito em três abordagens diferentes com a classe Actions no Selenium:
Arraste e solte no Selenium com Action Class no Selenium via método de compilação:
Precisamos ter dois elementos da web para executar o Drag and Drop no Selenium, como Source WebElement (que deve ser arrastado) e Destination WebElement (onde o Source WebElement deve ser solto, ou seja, o Destination WebElement). O método a seguir é um método personalizado ( que você poderia usar para construir seu Framework WebUtils) que executam o Drag and Drop no Selenium e este método leva dois argumentos, um é Source WebElement e outro é Destination WebElement conforme mencionado anteriormente:
public void dragAndDrop(Por origem, Por destino) { try { WebElement sourceElement = driver.findElement(source); WebElement destinationElement = driver.findElement(destination); Construtor de ações = new Actions(driver); Ação dragAndDrop = builder.clickAndHold(sourceElement).moveToElement(destinationElement) .release(destinationElement).build(); dragAndDrop.perform(); BASE_LOGGER.info("Executada com sucesso a ação de arrastar e soltar "); } catch (Exception e) { String exceptionData = e.getCause().getMessage(); BASE_LOGGER.error("Erro encontrado, por exemplo: " + exceptionData + " ao executar DragAndDrop "); } }
Para aprender todo o conceito sobre arrastar e soltar e obter todas as abordagens para realizar o Arrastar e Soltar no Selenium, clique aqui.
Clique e segure no selênio
ClickAndHold é outro método importante da classe Actions (do pacote org.openqa.selenium.interactions) no Selenium para
primeiro execute a operação do botão esquerdo sobre qualquer webElement e segure-o sem soltar o mouse.
Este método é usado principalmente durante a execução de cenários de arrastar e soltar, abaixo está o exemplo de imagem de código:
MoveToElement em Selenium
MoveToElement é um método da classe Actions no Selenium para realizar o movimento para outro WebElement (Destination Webelement), que esse método assume como um respectivo argumento.
Este método é usado principalmente durante a execução de cenários de arrastar e soltar, abaixo está o exemplo de imagem de código:
Clique duplo no selênio
Para replicar a operação de clique duplo via mouse, precisamos realizar o clique duplo via classe Actions no Selenium e podemos fazer isso da seguinte maneira:
public void doubleClick(By locator) { try { Elemento WebElement = driver.findElement(locator); Ações ações = new Ações(driver); actions.doubleClick(element).perform(); BASE_LOGGER.info("Realizou o duplo click no elemento : " + locator); } catch (StaleElementReferenceException e) { BASE_LOGGER.error("O elemento não está anexado ao documento da página " + e.getCause().getMessage()); } catch (NoSuchElementException e) { BASE_LOGGER.error("Elemento " + localizador + " não foi encontrado no DOM " + e.getCause().getMessage()); } catch (Exception e) { BASE_LOGGER.error("Elemento " + localizador + " não foi clicável " + e.getCause().getMessage()); } }
O trecho de código acima é um método que basicamente leva um argumento como Locator, ou seja, o WebElement no qual o clique duplo deve ser executado.
clique no contexto ou clique com o botão direito no Selenium
Para replicar a operação de clique de contexto ou clique com o botão direito do mouse, precisamos executar o método de clique de contexto por meio da classe Actions no Selenium e podemos fazer isso da seguinte maneira:
public void rightClick(Por localizador) { try { Elemento WebElement = driver.findElement(localizador); Ações ações = new Ações(driver); actions.contextClick(element).perform(); BASE_LOGGER.info("Executado o contexto Clique no Elemento : " + localizador); } catch (StaleElementReferenceException e) { BASE_LOGGER.error("O elemento não está anexado ao documento da página " + e.getCause().getMessage()); } catch (NoSuchElementException e) { BASE_LOGGER.error("Elemento " + localizador + " não foi encontrado no DOM " + e.getCause().getMessage()); } catch (Exception e) { BASE_LOGGER.error("Elemento " + localizador + " não foi clicável " + e.getCause().getMessage()); } }
O trecho de código acima é um método que basicamente leva um argumento como Locator, ou seja, o WebElement no qual o clique duplo deve ser executado.
Pausa no Selênio
Sempre que quisermos introduzir qualquer atraso de tempo entre diferentes ações, podemos usar o método de pausa entre as operações de ações, como digamos, se quisermos ter alguns segundos de atraso entre a operação de arrastar e soltar, então podemos chamar a pausa ( ) método da Classe de Ações em Selênio na abordagem abaixo:
public void pauseBetweenActions(By source,By destination, int timeUnit) { try { WebElement sourceElement = driver.findElement(source); WebElement destinationElement = driver.findElement(destination); Construtor de ações = new Actions(driver); builder.clickAndHold(sourceElement).moveToElement(destinationElement).pause(timeUnit).release(destinationElement).build().perform(); BASE_LOGGER.info("Executada com sucesso a ação de arrastar e soltar "); } catch (Exception e) { String exceptionData = e.getCause().getMessage(); BASE_LOGGER.error("Erro encontrado, por exemplo: " + exceptionData + " ao executar DragAndDrop "); } }
No método acima, ele leva três argumentos: um WebElement de origem, outro argumento é o elemento de destino e o último é para timeUnit, ou seja, o atraso de tempo que queremos introduzir usando pause () no Selenium.
Passe o mouse em selênio
O passar do mouse na operação Selenium pode ser alcançado usando a classe Actions no Selenium, basicamente, uma vez que estamos em foco com qualquer webElement e a partir daí, queremos passar o cursor do mouse para qualquer outro elemento por esta operação do mouse, e este WebElement onde queremos levar o cursor do mouse é chamado de Target WebElement.
Abaixo está o snippet de código para o mesmo:
public void mouseHover(Por targetLocator) { try { WebElement targetElement = driver.findElement(targetedLocator); Construtor de ações = new Actions(driver); builder.moveToElement(targetedElement).build().perform(); BASE_LOGGER.info("Executado com sucesso o foco do mouse na ação Selenium "); } catch (Exception e) { String exceptionData = e.getCause().getMessage(); BASE_LOGGER.error("Erro encontrado, por exemplo: " + exceptionData + " ao passar o mouse no Selenium "); } }
Para aprender sobre todos os Comando do webdriver Selenium que você pode consultar aqui .
Ações de teclado - classe de ações em Selenium
O que são ações do teclado e onde são necessárias:
As ações do teclado significam onde as operações são realizadas diretamente a partir de um teclado, como digamos que estamos tentando executar Contrl + A juntos ou Control + C juntos ou executar o botão Key up ou Keydown no teclado enquanto interagimos com WebElements.
Podemos realizar várias interações de teclado com a ajuda da classe Actions no Selenium
sendKeys em Selenium :
Podemos realizar a operação sendKeys com a ajuda da classe Actions no Selenium da maneira abaixo:
public void sendKeysWithActionClass(Por localizador) { try { Elemento WebElement = driver.findElement(localizador); Ações ações = new Ações(driver); actions.sendKeys("Entrada de dados do teclado"); // Executar ações do teclado pressionando Control ec juntos actions.sendKeys(Keys.CONTROL); actions.sendKeys("c"); actions.build().perform(); } catch (Exception e) { String exceptionData = e.getCause().getMessage(); } }
KeyUp no Selenium :
Da mesma forma, podemos realizar operações KeyUp com a classe Actions no Selenium da maneira abaixo:
public void keyUpWithActionClass(por localizador) { try { elemento WebElement = driver.findElement(localizador); Ações ações = new Ações(driver); actions.sendKeys("Entrada de dados do teclado"); // Executar ações do teclado pressionando Control e c junto com keyUp actions.keyUp(Keys.CONTROL); actions.sendKeys("c"); actions.build().perform(); } catch (Exception e) { String exceptionData = e.getCause().getMessage(); } }
KeyDown em Selenium
Podemos realizar a operação keyDown com a ajuda da classe Actions novamente no Selenium na abordagem abaixo:
public void keyDownWithActionClass(Por localizador) { try { Elemento WebElement = driver.findElement(localizador); Ações ações = new Ações(driver); actions.sendKeys("Entrada de dados do teclado"); // Executar Ações do Teclado pressionando Control e V junto com keyDown actions.keyDown(Keys.CONTROL); actions.sendKeys("v"); actions.build().perform(); } catch (Exception e) { String exceptionData = e.getCause().getMessage(); } }
Conclusão: Com isso terminamos aqui com a classe Actions em Selenium, no próximo tutorial JavascriptExecutor em Selenium de forma modular mas exaustiva. Aprender Exaustivamente o comando Selenium você pode consultar aqui também para se preparar para Perguntas críticas da entrevista do Selenium que você pode consultar aqui.