Pular para o conteúdo principal
Version: 3.23

Ambientes web

cURL

Executor para solicitações de páginas web simples. Páginas que não tenham ambiente JavaScript ou eventos HTML. Você pode utilizar esse executor para sistemas legados que possuam arquitetura HTML4 pura;

HTTP

Executor para solicitações de páginas web complexas onde há mais interatividade usando elementos JavaScript e acionadores de eventos são necessários;

Executor Selenium

Selenium é uma solução de automação de aplicações web criada com o objetivo de apoiar times durante testes automatizados, simulando um usuário.

info

Para informações acesse a documentação oficial do Selenium (em inglês).

Através deste executor é possível a criação de templates utilizando scripts em Python para automatizar as troca de senha em aplicações web, como, Instagram, Facebook, Gmail etc..

Para usuários que não possuam afinidade com a linguagem Python, é possível utilizar a extensão Selenium IDE para Google Chrome ou Firefox. Enquanto o usuário navega pela aplicação web, todos os passos e informações inseridas são capturadas, e convertida em um script que pode ser utilizado como template no senhasegura.

Selenium IDE

Para saber mais sobre o Selenium IDE, consulte a página oficial em Selenium IDE (em inglês).

Criar template para executor Selenium

A criação de templates para o executor Selenium é dividida em duas etapas:

  1. Gravação do passo a passo do template utilizando o Selenium IDE
  2. Criação do template no senhasegura

Gravar passo a passo com Selenium IDE

Para criação do template, nós iremos utilizar a extensão Selenium IDE para navegadores. Ele automatiza a criação do template gravando todos os cliques e preenchimento de campos enquanto o usuário navega pelo site.

Após instalar a extensão em seu navegador, siga os passos abaixo:

  1. Em seu navegador, clique no ícone para abrir a extensão Selenium IDE.
  2. Na janela que abrir, clique na opção Record a new test in a new project.
  3. Insira um nome para seu projeto no campo PROJECT NAME. Por exemplo: Reddit.
  4. Clique no botão OK.
  5. No campo BASE URL, insira a URL da página de login do site para o qual deseja criar o template. Por exemplo: https://www.reddit.com/account/login/.
  6. Clique no botão START RECORDING. Isso fará com o endereço inserido na BASE URL sejá aberto em uma nova janela. A partir deste ponto, todos os cliques e informações inseridas nos campos serão capturadas pelo Selenium IDE.
  7. A partir de agora, preencha todos os campos que o template deverá seguir. No nosso exemplo do Reddit, os passos são:
    1. Preencher os campos de usuário e senha, e clicado no botão de log in.
    2. Navegar até a página de Troca de senha.
    3. Preencher os campos Senha anterior, Nova senha, Confirmar nova senha e clicar no botão Salvar.
      RECOMENDAÇÃO

      Recomendamos que como forma de validação da nova senha, após alterá-la, seja feito um logout e um novo login com ela para garantir que a troca foi realizada com sucesso.

  8. Após realizados todos os passos para a troca da senha no site para o qual deseja criar o template, retorne à janela do Selenium IDE.
  9. No canto superior-direito, clique no ícone Stop recording e preencha o campo TEST NAME. Por exemplo: Reddit password change.
  10. Na lateral-esquerda, clique no teste que criou com o botão direito do mouse e escolha a opção Export.
  11. Dentre as opções apresentadas, selecione a linguagem Python pytest e clique no botão Export.
  12. Salve o arquivo em seu computador.
IMPORTANTE

Para que a automação funcione corretamente, o site no qual deseja executar o template não pode possuir multifator de Autenticação habilitado.

DICA

Você pode validar seu script clicando na ação Run current test no Selenium IDE antes de exportá-lo. Para isso, será necessário alterar a coluna Value das senhas, pois elas foram alteradas no processo de criação do script.

Criar template no senhasegura

Agora que temos o arquivo com os passos que o template deverá possuir, vamos adicioná-lo ao senhasegura. Para isso, siga os passos abaixo:

  1. Abra o arquivo .py que salvou na etapa anterior em qualquer editor de textos. Pode ser até mesmo o Bloco de notas. No nosso exemplo do Reddit, o conteúdo será parecido com o seguinte:
Abrir código

test_redditpasswordchange.py
# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

class TestRedditpasswordchange():
def setup_method(self, method):
self.driver = webdriver.Chrome()
self.vars = {}

def teardown_method(self, method):
self.driver.quit()

def test_redditpasswordchange(self):
self.driver.get("https://www.reddit.com/account/login/")
self.driver.set_window_size(1920, 1030)
self.driver.find_element(By.ID, "loginUsername").click()
self.driver.find_element(By.ID, "loginUsername").send_keys("username")
self.driver.find_element(By.ID, "loginPassword").click()
self.driver.find_element(By.ID, "loginPassword").send_keys("OldPassword")
self.driver.find_element(By.ID, "loginPassword").send_keys(Keys.ENTER)
self.driver.get("https://reddit.com/change_password")
self.driver.find_element(By.ID, "old_password").click()
self.driver.find_element(By.ID, "old_password").send_keys("OldPassword")
self.driver.find_element(By.ID, "password").click()
self.driver.find_element(By.ID, "password").send_keys("NewPassword")
self.driver.find_element(By.ID, "password2").click()
self.driver.find_element(By.ID, "password2").send_keys("NewPassword")
self.driver.find_element(By.ID, "password2").send_keys(Keys.ENTER)
WebDriverWait(driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//button[@id=\'USER_DROPDOWN_ID\']")))

  1. Copie o conteúdo a partir da linha onde está o endereço inserido em BASE URL. No nosso exemplo, será a partir da linha 22:
Abrir código

self.driver.get("https://www.reddit.com/account/login/")
self.driver.set_window_size(1920, 1030)
self.driver.find_element(By.ID, "loginUsername").click()
self.driver.find_element(By.ID, "loginUsername").send_keys("username")
self.driver.find_element(By.ID, "loginPassword").click()
self.driver.find_element(By.ID, "loginPassword").send_keys("OldPassword")
self.driver.find_element(By.ID, "loginPassword").send_keys(Keys.ENTER)
self.driver.get("https://reddit.com/change_password")
self.driver.find_element(By.ID, "old_password").click()
self.driver.find_element(By.ID, "old_password").send_keys("OldPassword")
self.driver.find_element(By.ID, "password").click()
self.driver.find_element(By.ID, "password").send_keys("NewPassword")
self.driver.find_element(By.ID, "password2").click()
self.driver.find_element(By.ID, "password2").send_keys("NewPassword")
self.driver.find_element(By.ID, "password2").send_keys(Keys.ENTER)
WebDriverWait(driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//button[@id=\'USER_DROPDOWN_ID\']")))

  1. Para poder usar este template no senhasegura, basta substituir os campos pelas variáveis que devem ser preenchidas automaticamente durante o processo de troca de senha. Veja um exemplo:
Abrir código

self.driver.get("https://www.reddit.com/account/login/")
self.driver.set_window_size(1920, 1030)
self.driver.find_element(By.ID, "loginUsername").click()
self.driver.find_element(By.ID, "loginUsername").send_keys("[#USERNAME#]")
self.driver.find_element(By.ID, "loginPassword").click()
self.driver.find_element(By.ID, "loginPassword").send_keys("[#CURRENT_PASSWORD#]")
self.driver.find_element(By.ID, "loginPassword").send_keys(Keys.ENTER)
self.driver.get("https://reddit.com/change_password")
self.driver.find_element(By.ID, "old_password").click()
self.driver.find_element(By.ID, "old_password").send_keys("[#CURRENT_PASSWORD#]")
self.driver.find_element(By.ID, "password").click()
self.driver.find_element(By.ID, "password").send_keys("[#NEW_PASSWORD#]")
self.driver.find_element(By.ID, "password2").click()
self.driver.find_element(By.ID, "password2").send_keys("[#NEW_PASSWORD#]")
self.driver.find_element(By.ID, "password2").send_keys(Keys.ENTER)
WebDriverWait(driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH, "//button[@id=\'USER_DROPDOWN_ID\']")))

  1. Agora seu código já está pronto para ser utilizado em seu template de troca de senha. Selecione o executor Selenium ao Criar seu template

Variáveis dos templates

Confira a lista de variáveis que você pode utilizar em seus templates de troca de senha.

VariávelDescrição
[#USERNAME#]Username da credencial
[#CURRENT_PASSWORD#]Valor da senha atual
[#NEW_PASSWORD#]Valor da nova senha
[#AUTH_USER#]Username da credencial para autenticação
[#AUTH_PASSWORD#]Senha da credential para autenticação
[#AUTH_DOMAIN#]Domínio da credencial para autenticação
[#ADD_INFO#]Informações adicionais da credencial
[#IP#]IP do dispositivo
[#HOSTNAME#]Hostname do dispositivo
[#DOMAIN#]Domínio da credencial
[#SERVER_PATH#]Caminho do servidor

Funções que você pode utilizar eu seus templates

Você pode utilizar em seu template todos os comandos disponíveis para a classe driver.* (ou self.driver.*). Confira a lista de comandos disponíveis na documentação oficial do Selenium (em inglês).

Confira a lista de funções que podem ser utilizadas em seu template:

FunçãoDescrição
self.driver.*Comandos para manipulação dos elementos do navegador simulando o usuário. Pode ser utilizado como diver.* também.

Exemplo de uso: self.driver.get("https://instagram.com")

Saiba mais em: selenium.dev/pt-br/documentation/webdriver/browser/
WebDriverWaitFaz o Driver aguardar até que uma condição seja verdadeira. Você pode utilizá-lo para verificar se algum elemento da página já foi carregado, como, por exemplo, algum campo do formulário de login.

Exemplo de uso: WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.ID, "username")))

Saiba mais em: selenium.dev/pt-br/documentation/webdriver/waits/
ActionChainsActionChains são uma maneira de automatizar interações de baixo nível, como movimentos do mouse, ações do botão do mouse, pressionamento de tecla e interações do menu de contexto. Isso é útil para realizar ações mais complexas, como passar o mouse e arrastar e soltar.

Exemplo de uso: ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()

Saiba mais em: selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains
printImprime uma mensagem durante a execução do template. Você pode utilizá-lo para fazer marcações durante a execução.

Exemplo de uso: print("Sua mensagem aqui")

Saiba mais em: docs.python.org/pt-br/3/tutorial/inputoutput.html
timeoutAguarda por um tempo determinado em segundos antes de continuar a execução.

Exemplo de uso: timeout(15)