Ir para o conteúdo

Lab 3.1: Script Selenium custon

Nesse lab, vamos fazer a orquestração de uma automação em Selenium no BotCity Maestro. Essa automação simples acessa o site Practice Test Automation, faz o login e o logout no sistema.

Projeto: Practice Test Automation

Crie uma pasta com o nome de bot-selenium, nela teremos os seguintes arquivos:

requirements.txt

No arquivo requirements.txt definimos as dependências necessárias para a automação:

# Configuração para usar esta versão específica do pacote
selenium==4.10.0   
# Incluindo a dependência BotCity Maestro SDK para orquestrar
botcity-maestro-sdk
# Incluindo pacote para gestão de driver web
webdriver-manager

geckodriver.exe

Para poder trabalhar com automações web, precisamos usar o WebDriver correspondente ao navegador que está sendo utilizado na automação.

Utilizaremos o Firefox para essa automação, você pode baixar o GeckoDriver através deste link.

Importante

Certifique-se de selecionar o WebDriver correto de acordo com seu sistema operacional, clique em show all assets para verificar quais estão disponíveis.

bot.py

No arquivo bot.py teremos o seguinte código Selenium:

from botcity.maestro import *

from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service

BotMaestroSDK.RAISE_NOT_CONNECTED = False


def main():
    # Instancia do Orquestrador
    maestro = BotMaestroSDK.from_sys_args()
    execution = maestro.get_execution()

    try:
        # Cria uma instância do Navegador
        bot = webdriver.Firefox()

        # Acessa página Practice Test Automation
        bot.get("https://practicetestautomation.com/practice-test-login/")

        username = "student"
        password = "Password123"

        # Busca pelo elemento input de nome de usuário
        input_username = bot.find_element(By.ID, "username")
        # Ação de digitar
        input_username.send_keys(username)

        # Busca pelo elemento input de senha
        input_password = bot.find_element(By.ID, "password")
        # Ação de digitar
        input_password.send_keys(password)

        # Busca pelo elemento botão submit
        input_button = bot.find_element(By.ID, "submit")
        # Ação de clicar
        input_button.click()

        # Aguarda 3 segundos para garantir que carregou a página com resultado
        sleep(3)

        # Busca pela confirmação de login
        logged = bot.find_element(By.CSS_SELECTOR, ".post-title")
        # Imprime o texto da confirmação
        print(logged.text)        

        # Busca pelo elemento botão log out
        logout = bot.find_element(By.CSS_SELECTOR, ".wp-block-button__link")
        # Ação de clicar
        logout.click()

        # Busca pelo titulo login para garantir que fez o logout
        bot.find_element(By.CSS_SELECTOR, "#login > h2:nth-child(1)")

        # Define status e mensagem de finalização da tarefa com sucesso
        finish_status = AutomationTaskFinishStatus.SUCCESS
        finish_message = "Tarefa bot-selenium finalizada com sucesso"

    except Exception as ex:
        # Busca pelo elemento de mensagem de erro
        error_alert = bot.find_element(By.ID, "error")
        # print(error_alert.text) remove
        # print(ex) remove

        # Grava uma captura de tela
        bot.save_screenshot("captura.png")

        # Define quais informações extras 
        # serão carregadas no BotCity Maestro
        tags = {
            "username": username,
            "password": password,
            "error": error_alert.text
            }

        # Registrando o erro
        maestro.error(
            task_id=execution.task_id,
            exception=ex,
            tags=tags,
            screenshot="captura.png"
        )

        # Define status de finalização da tarefa com falha
        finish_status = AutomationTaskFinishStatus.FAILED
        finish_message = f"Tarefa bot-selenium finalizada com falha: {error_alert.text}"

    finally:
        # Finaliza fechando o navegador
        bot.quit()

        # Finaliza tarefa com o BotMaestro
        maestro.finish_task(
            task_id=execution.task_id,
            status=finish_status,
            message=finish_message
        )

        # Imprime mensagem de finalização
        print("Finally")

if __name__ == "__main__":
    main()

Estrutura de arquivos

A estrutura ficará dessa forma:

    .bot-selenium
    ├── bot.py
    ├── geckodriver.exe 
    └── requirements.txt

Dica

É possivel fazer o download do projeto completo, com arquivos adicionais de build no GitHub neste link.

Testando seu projeto localmente

Para testar seu projeto localmente, vamos criar um ambiente virtual para instalar as dependências do Python utilizadas no projeto.

Criando o ambiente virtual

Utilizando o terminal de comando, acesse a pasta do projeto que você criou. A partir dessa pasta, abra o terminal de comando e execute o comando abaixo para criar um ambiente virtual:

python -m venv venv

Ativando o ambiente virtual

Após criar o ambiente virtual, você precisará ativá-lo. Para isso, utilize o comando abaixo:

venv\Scripts\activate

Instalando as dependências do projeto

Utilizando o terminal de comando, execute o comando abaixo para instalar as dependências definidas no arquivo requirements.txt:

python -m pip install --upgrade -r requirements.txt

Este comando vai produzir uma saída grande referente a instalação de todas as dependências. Assim que este processo terminar, seu projeto estará pronto para ser executado.

Rodando seu robô

Ainda utilizando o terminal aberto dentro da pasta do projeto, você pode executar sua automação com o seguinte comando:

python bot.py
A saida esperada será semelhante a essa:
Logged In Successfully
Finally