Otimize seu tempo com Selenium e Node.js

Otimize seu tempo com Selenium e Node.js

Em qualquer trabalho, pode haver tarefas que eventualmente se tornem um tanto repetitivas. Isto é especialmente comum na área de suporte de software, onde é comum receber um grande número de solicitações (tickets) que envolvem a realização da mesma ação, mas para usuários diferentes.

Um exemplo que destaco é uma ocasião em que fui designado para administrar um aplicativo encarregado de gerenciar o acesso aos cursos de uma grande empresa automotiva. Num único dia, tive que lidar com cerca de 50 tickets que, em essência, exigiam a execução de uma sequência idêntica de etapas.


Basicamente o processo foi o seguinte:

  1. Entre no site pelo painel de administração.
  2. Clique no botão correspondente para adicionar ou remover um usuário.
  3. Insira o ID do usuário fornecido no ticket.
  4. Execute um segundo clique no botão para executar a ação de adicionar ou excluir, conforme necessário.

Como você pode ver, este é um processo bastante simples, mas pode se tornar entediante diante de um grande volume de solicitações. Além disso, esta tarefa consome tempo que poderia ser utilizado em outras atividades. Dito isto, precisávamos encontrar uma solução que permitisse que as solicitações fossem concluídas de forma mais eficiente.

A resposta para essa tarefa é um software chamado Selenium, que é um conjunto de ferramentas e bibliotecas utilizadas principalmente para automação em aplicações web.

O Selenium é amplamente utilizado na indústria de desenvolvimento de software para automatizar testes funcionais e de regressão em aplicações web. Também é utilizado na extração de dados web (web scraping) e para realizar tarefas automatizadas em navegadores web. É uma ferramenta versátil e essencial para garantir a qualidade e funcionalidade de aplicações web em um ambiente de desenvolvimento ágil.

Usar o Selenium para automação de testes e outras tarefas relacionadas à interação em navegadores da web oferece diversas vantagens, incluindo:

  • Suporte para vários navegadores: O Selenium é compatível com uma variedade de navegadores populares, incluindo Chrome, Firefox, Safari, Edge e Internet Explorer. Isso permite testar a compatibilidade de um aplicativo em diferentes navegadores.
  • Automação de testes: O Selenium é amplamente utilizado na automação de testes de aplicações web, permitindo a execução de testes de maneira repetível, consistente e eficiente. Isso é essencial para garantir a qualidade e funcionalidade das aplicações web.
  • Integração com ferramentas de gerenciamento de testes: O Selenium pode ser integrado a ferramentas de gerenciamento de testes, como TestNG, JUnit e outras, para gerenciamento e relatórios eficientes de casos de teste.
  • Automação de tarefas da Web: Além de testes, o Selenium é usado para automatizar tarefas web, como web scraping, o que é útil em aplicações que requerem extração de dados de sites.

A questão aqui é que esta aplicação que geramos com Selenium deve ser implementada em alguma plataforma que seja acessível a diversos usuários. Dito isto, o desenvolvimento depende principalmente do Node.js.

Com base no exemplo que compartilhei com vocês sobre a plataforma de acesso a cursos, vamos realizar um exercício de implementação do Selenium em Node.js:

1) Abra um terminal ou linha de comando.

2) Vá para o diretório do projeto Node.js ou crie um novo, se ainda não o tiver feito.

3) Execute o seguinte comando para instalar o selenium-webdriver usando npm:

npm install selenium-webdriver

4) Junto com o selenium-webdriver, você precisa instalar o driver específico para o navegador que deseja usar. Por exemplo, se quiser usar o Chrome, você pode instalar o driver do Chrome chamado chromedriver:

npm install chromedriver

Obviamente você precisa ter instalado o navegador que deseja automatizar, neste caso o Chrome.

1) Agora com nosso driver e Selenium instalados, vamos realizar o passo 1 do nosso trabalho repetitivo:

const { Builder, By, Key, until } = require('selenium-webdriver');

const chrome = require('selenium-webdriver/chrome');

(async function example() {

const options = new chrome.Options();

// Opções adicionais de navegador, se necessário

// options.addArguments('--headless'); // Para executar em modo headless (sem interface gráfica)

const driver = new Builder()

.forBrowser('chrome')

.setChromeOptions(options)

.build();

try {

// Navegue até a página de login

await driver.get('URL_DO_SITE_DO_LOGIN');

// Encontre o campo de e-mail e preencha-o com um e-mail válido

const emailField = await driver.findElement(By.id('id_do_campo_do_correio'));

emailField.sendKeys('correo@example.com');

// Encontre o campo de senha e preencha-o com uma senha válida

const passwordField = await driver.findElement(By.id('id_do_campo_da_senha'));

passwordField.sendKeys('sua_senha_secreta');

// Encontre e clique no botão de login

const loginButton = await driver.findElement(By.id('id_do_botao_do_inicio_de_sessao'));

loginButton.click();

// Aguarde o carregamento completo da página ou execute outras ações na página de destino

await driver.wait(until.titleIs('Título da página de destino'), 10000);

// Apenas a etapa 1 do nosso problema termina aqui.

2) Agora vamos realizar a segunda etapa, onde vamos validar a ação a ser realizada, determinada pela solicitação do usuário:

// Navegue até a página que contém os botões da ação (vamos supor que o URL seja a "URL_DA_PAGINA")

await driver.get('URL_DE_LA_PAGINA');

// Verifica o valor da constante "ação" para determinar se deve clicar em "Adicionar" ou "Excluir"

const accion = 'excluir'; //Este valor deverá ser atribuído com base no ticket de trabalho a ser realizado, valor que será determinado pelo usuário.

if (ação === 'agregar') {

// Se a ação for "adicionar", encontre e clique no botão adicionar

const botaoAdicionar = await driver.findElement(By.id('id_do_botao_adicionar'));

botaoAdicionar.click();

} else if (accion === 'eliminar') {

// Se a ação for "excluir", localize e clique no botão excluir

const botaoEliminar = await driver.findElement(By.id('id_do_botão_excluir'));

botaoExcluir.click();

} else {

// Lide com o caso em que "ação" não é "adicionar" nem "remover"

console.error('Valor de ação inválido');

}

3) Agora com a ação determinada, basta inserir o ID do usuário, procurá-lo em nossa lista e clicar no botão executar para finalizar o ticket correspondente:

// Encontre o campo de entrada com o ID "id_do_usuário" e defina um valor

const inputUsuário = await driver.findElement(By.id('ID_do_usuário'));

inputUsuário.sendKeys('valor_para_inserir');

// Encontre o botão de pesquisa e clique nele

const botonBuscar = await driver.findElement(By.id('ID_do_botão_buscar'));

botaoBuscar.click();

// Aguarde o carregamento da página após clicar no botão de pesquisa

// ...

// Encontre o menu suspenso com o ID "combobox_usuario" e selecione um valor por seu índice (0 para o primeiro item)

const comboboxUsuario = await driver.findElement(By.id('combobox_usuario'));

comboboxUsuario.selectByIndex(0);

// Encontre o botão de ação e clique nele

const botãoAção = await driver.findElement(By.id('ID_do_botão_ação'));

botaoAção.click();

// Aguarde o carregamento completo da página ou execute outras ações na página de destino

// ...

} finally {

// Feche o navegador quando terminar

await driver.quit();

}

})();

Lembre-se que este é um exemplo básico de como usar Selenium com Node.js. É por isso que muitos dos valores e IDs são genéricos, mas certamente podem te ajudar em suas implementações.

Resumindo, Selenium e Node.js são uma combinação poderosa para automatizar testes e tarefas em aplicações web.

Se você é novo no Selenium e no Node.js, recomendo que você se aprofunde na documentação oficial e explore projetos e tutoriais online. A combinação dessas tecnologias oferece um mundo de oportunidades para simplificar e melhorar seu fluxo de trabalho no desenvolvimento e teste de aplicações web.

Espero que este artigo tenha sido útil para você e tenha lhe dado uma base sólida para começar a usar Selenium e Node.JS em seus projetos. Não hesite em explorar mais para descobrir o que você pode conseguir com esta combinação poderosa.

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.