Executores de ambientes Web
cURL
Executor de requisições para páginas web simples. Páginas sem ambiente JavaScript ou eventos HTML. Você pode usar este executor para sistemas legados baseados em arquitetura HTML4 pura;
HTTP
Executor de requisições a páginas web complexas onde é necessária mais interatividade utilizando elementos JavaScript e triggers de eventos;
Selênio
O Selenium é uma solução de automação de aplicações web criada com o objetivo de apoiar as equipes durante os testes automatizados, simulando um usuário.
Para obter informações, acesse a documentação oficial do Selenium.
Através deste executor é possível criar templates utilizando scripts Python para automatizar mudanças de senha em aplicativos web como Instagram, Facebook, Gmail etc.
Para usuários que não estão familiarizados com a linguagem Python, é possível usar a extensão Selenium IDE para Google Chrome ou Firefox. Enquanto o usuário navega no aplicativo web, todas as etapas e informações inseridas são capturadas e convertidas em um script que pode ser utilizado como modelo no senhasegura.
Embedded browser version
Ferramenta | Versão |
---|---|
Chrome | 4.1.4 |
Para saber mais sobre o Selenium IDE, consulte a página oficial em Selenium IDE.
Criar modelo para o executor do Selenium
A criação de templates para o executor do Selenium é dividida em duas etapas:
- Gravando o modelo passo a passo usando o Selenium IDE
- Criação do template no senhasegura
Grave passo a passo com o Selenium IDE
Para criar o modelo, usaremos a extensão Selenium IDE para navegadores. Ele automatiza a criação do template registrando todos os cliques e preenchendo os campos conforme o usuário navega no site.
Após instalar a extensão em seu navegador, siga os passos abaixo:
- Em seu navegador, clique no ícone para abrir a extensão Selenium IDE.
- Na janela que se abre, clique na opção Gravar um novo teste em um novo projeto.
- Digite um nome para seu projeto no campo NOME DO PROJETO. Por exemplo: Reddit.
- Clique no botão OK.
- No campo URL BASE, insira o URL da página de login do site para o qual deseja criar o modelo. Por exemplo: https://www.reddit.com/account/login/.
- Clique no botão INICIAR GRAVAÇÃO. Isso usará o endereço inserido na URL BASE para abrir em uma nova janela. A partir deste ponto, todos os cliques e informações inseridos nos campos serão capturados pelo Selenium IDE.
- A partir de agora, preencha todos os campos que o template deve seguir. Em nosso exemplo do Reddit, as etapas são:
- Preencha os campos nome de usuário e senha e clique no botão de login.
- Navegue até a página Alterar senha.
- Preencha os campos Anterior senha, Nova senha, Confirmar nova senha e clique no botão Salvar.RECOMENDAÇÃO
Recomendamos que, como forma de validar a nova senha, após alterá-la, você saia e faça login novamente com ela para garantir que a alteração foi bem-sucedida.
- Após seguir todas as etapas para alterar a senha no site para o qual deseja criar o modelo, retorne à janela Selenium IDE.
- No canto superior direito, clique no ícone Parar gravação e preencha o campo NOME DO TESTE. Por exemplo: Mudança de senha do Reddit.
- No lado esquerdo, clique no teste que você criou com o botão direito do mouse e escolha a opção Exportar.
- Entre as opções apresentadas, selecione o idioma Python pytest e clique no botão Export.
- Salve o arquivo em seu computador.
Para que a automação funcione corretamente, o site no qual você deseja executar o modelo não pode ter a autenticação de fator duplo habilitada.
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 Valor das senhas, pois elas foram alteradas no processo de criação do script.
Criar template no senhasegura
Agora que temos o arquivo com as etapas que o template deve ter, vamos adicioná-lo ao senhasegura. Para fazer isso, siga os passos abaixo:
- Abra o arquivo
.py
que você salvou na etapa anterior em qualquer editor de texto. Pode até ser o Bloco de Notas. Em nosso exemplo do Reddit, o conteúdo ficará assim:
Open Code
# 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\']")))
- Copie o conteúdo da linha onde está o endereço inserido em BASE URL. Em nosso exemplo, será da linha 22:
Open Code
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\']")))
- Para poder utilizar este template no senhasegura, basta substituir os campos pelas variáveis que devem ser preenchidas automaticamente durante o processo de mudança de senha. Veja um exemplo:
Open Code
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\']")))
- Agora seu código está pronto para ser usado em seu modelo de alteração de senha. Selecione o executor do Selenium ao Criar seu modelo
Funções que você pode usar nos templates
Você pode usar em seu template todos os comandos disponíveis para a classe driver.*
(ou self.driver.*
). Verifique a lista de comandos disponíveis em Documentação oficial do Selenium.
Confira a lista de funções que podem ser usadas em seu template:
Função | Descrição |
---|---|
self.driver.* | Commands for manipulating browser elements simulating the user. Can be used as diver.* as well. Usage example: self.driver.get("https://instagram.com") Learn more: Selenium webdrivers |
WebDriverWait | Makes the Driver wait until a condition is true. You can use it to check if any page element has already been loaded, such as, for example, a login form field. Usage example: WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.ID, "username"))) Learn more: Selenium Waits |
ActionChains | ActionChains are a way to automate low-level interactions such as mouse movements, mouse button actions, keystrokes, and context menu interactions. This is useful for performing more complex actions such as hovering and dragging and dropping. Usage example: ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform() Learn more: Selenium Action Chains |
Prints a message during template execution. You can use it to make markups during execution. Usage example: print("Your message here") Learn more: Python Outputs | |
timeout | Wait for a determined time in seconds before continuing the execution. Usage example: timeout(15) |