Ir para o conteúdo

Lab 3.3: Funcionalidades

O nosso projeto está pronto para fazer a comunicação com o Orquestrador BotCity e utilizar suas funcionalidades.

Vamos adicionar a integração de finalização de tarefas e o uso de credenciais para deixar nossa automação mais segura.

Finalizar tarefa

Essa é uma funcionalidade importante, pois dependendo do fluxo da automação, podemos ter diferentes resultados para reportar ao final da execução. Além de fazer a contagem de falhas e sucessos no processo.

Vamos adicionar as seguintes integrações no nosso código:

  • Contagem de item com sucesso ou falha
  • Finalização da tarefa com status e mensagem personalizada para cada cenário

Aqui utilizaremos o objeto maestro para finalizar a tarefa com o método maestro.finish_task().

Veja as linhas destacadas no código abaixo:

def main():
    # Instância do Orquestrador
    maestro = BotMaestroSDK.from_sys_args()
    execution = maestro.get_execution()

    sucesso = 0
    falha = 0

    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 título login para garantir que fez o logout
        bot.find_element(By.CSS_SELECTOR, "#login > h2:nth-child(1)")

        # Define valores de finalização com sucesso
        finish_status = AutomationTaskFinishStatus.SUCCESS
        finish_message = "Tarefa bot-selenium finalizada com sucesso"
        sucesso += 1

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

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

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

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

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

        # Finaliza tarefa no Orquestrador
        maestro.finish_task(
            task_id=execution.task_id,
            status=finish_status,
            message=finish_message,
            total_items=1,
            processed_items=sucesso,
            failed_items=falha
        )

Definindo Credenciais

Outra integração importante é o uso de credenciais para armazenar informações sensíveis, como logins e senhas, de forma segura. Note que o código do script está com os valores de username e password expostos.

Vamos fazer a alteração desses valores por Credenciais do Orquestrador BotCity.

Orquestrador

Para criar uma nova credencial, navegue até o menu Credenciais no Orquestrador BotCity e clique no botão + Nova Credencial

Vamos adicionar as seguintes informações:

  • Label: login_automatico
  • Chave: username | Valor: student
  • Chave: password | Valor: Password123

Nova Credencial

Código

Para carregar as credenciais no código da automação, utilize o método get_credential(), substituindo os valores expostos no código.

# Carrega credenciais para acessar o site
username = maestro.get_credential(label="login_automatico", key="username")
password = maestro.get_credential(label="login_automatico", key="password")

Build e Deploy

Com as integrações prontas, os próximos passo são:

  • Fazer o build do projeto
  • Fazer o deploy no Orquestrador BotCity
  • Executar a automação através do Runner

Build

Quando o projeto não for criado através do template, não teremos o arquivo .build disponível, mas isso não impede de fazermos o build manualmente.

O script do arquivo de build faz a compactação dos arquivos do projeto em um arquivo .zip, que será enviado para o Orquestrador BotCity, podemos fazer os seguintes passos:

  • Selecionar os arquivos do projeto (não incluir venv ou outros arquivos desnecessários)
  • Compactar os arquivos em um arquivo .zip
  • Nomear o arquivo como CustomBot.zip (ou outro nome de sua preferência)
CustomBot.zip
├── bot.py <- Arquivo contendo código ou importando outros scripts Python.
└── requirements.txt <- Arquivo que descreve as dependências do Python para seu bot.

Importante

Neste exemplo estamos utilizando apenas os arquivos principais, mas se você tiver uma estrutura com vários scripts Python, por exemplo:

CustomBot
├── bot.py
├── script.py
├── my_functions.py
├── utils.py
└── requirements.txt

Você pode usar o bot.py apenas para chamar seus outros scripts e criar o arquivo .zip da mesma forma. O mais importante é considerar o bot.py como o 'main' do projeto e definir todas as dependências utilizadas no arquivo requirements.txt.

Deploy

Com o arquivo .zip em mãos, agora podemos implantar este bot e executá-lo através do Orquestrador e do Runner normalmente. Os passos serão os mesmos para qualquer script.

Dica

Caso não lembre como fazer o deploy na plataforma do Orquestrador, veja os passos no lab sobre Orquestração.