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
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.
