Sites para praticar RPA
Tags: braziliandevs, python, rpa, botcity
Published: 2023-11-08 01:45:12

> Para esse artigo você precisa ter:
> - Conhecimento básico de programação
> - Conhecimento básico da biblioteca Selenium

> Qualquer dúvida, comente! 

---

_Robotic Process Automation_ (RPA) visa implementar soluções com automação robótica de processos para livrar pessoas de trabalhos repetitivos, trazendo mais agilidade e segurança para os negócios. Esses processos podem acontecer interagindo com aplicativos de computador como sistemas _Customer Relationship Management_ (CRM), _Enterprise Resource Planning_ (ERP) ou mesmo navegadores web, acessando portais comumente utilizados pelas organizações.

Quando entramos no contexto de RPA, temos diversas ferramentas diferentes para atender nossas demandas, sendo elas plataformas “no-code” ou “low-code” e ainda existe a possibilidade de utilizar código em alguma linguagem de programação para criar sua automação. Nesse artigo eu apresento um site para praticar suas automações do tipo Web, utilizando código Python e interagindo com navegadores diretamente com o _Document Object Model_ (DOM) das páginas.

Uma das formas de melhorar a habilidade de programar é praticando. Dentro da área de RPA não é diferente, precisamos aprender sobre como os processos funcionam e assim conseguir desenvolver um programa capaz de executar todos os passos necessários para realizar a tarefa proposta com sucesso.


## [Practice Test Automation](https://practicetestautomation.com/)
Nesse site temos opções de fazer testes com nossa automação em contextos como:
- Test Login Page:  preenchendo o login da página utilizando as credenciais disponíveis, podendo testar casos de login válido ou inválido
- Test Exceptions: tratamento de exceções mais comuns com base na ferramenta Selenium.

Abordando o primeiro caso, temos a possibilidade de preencher dois campos de texto, referentes a username e password e clicar um botão submit. Dependendo de como os campos foram preenchidos, teremos como respostas diferentes ao clicar no botão. A partir dessas respostas poderemos avaliar se a automação está passando pelas etapas corretas.

### Como fica em código?

É importante verificar se todas as dependências necessárias estão instaladas na máquina para executar o código.

Para esse projeto utilizaremos as seguintes bibliotecas, nas versões fixadas:

```txt
selenium==4.10.0
webdriver-manager==3.8.5
```

O comando de instalação no terminal fica dessa forma:
```ps
python -m pip install selenium==4.10.0 webdriver-manager==3.8.5
```


Criaremos um arquivo python com o nome de bot.py, nele descreveremos os passos para preencher o formulário em forma de instruções.

```python
from time import sleep

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


def main():
    try:
        # Define o caminho do WebDriver executável do Firefox
        service = Service(executable_path=r"geckodriver.exe")

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

        # Define a URL da página Practice Test Automation na área de login
        url = "https://practicetestautomation.com/practice-test-login/"
        # Acessa página definida
        bot.get(url)

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

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

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

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

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

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

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

        # Imprime a mensagem de erro
        print(error_alert.text)

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

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


if __name__ == "__main__":
    main()

```


Ao executar esse código, o resultado deve ser a seguinte:

```ps
PS C:\practice_test_automation> python .\bot.py
Logged In Successfully
Finally
```

Nesse caso, ocorreu tudo como esperado, a automação preencheu os campos com os valores corretos e clicou no botão de login, acessando a página de confirmação e depois clicou em logout para sair da página.

Para testar outras validações, vamos alterar inicialmente o preenchimento do campo de nome de usuário, colocando um valor inválido.

```python
        # Ação de digitar no elemento
        # elemento_campo_usuario.send_keys("student")
        # Valor incorreto para teste de erro
        elemento_campo_usuario.send_keys("estudante")
```

Esse será o resultado ao executar:
```ps
PS C:\practice_test_automation> python .\bot.py
Your username is invalid!
Finally
```

## Conclusão
Podemos notar que o site oferece algumas formas de busca e interação com os elementos da DOM. Como sugestão, tente fazer outras alterações como mudar a senha que retorna outra mensagem de validação, além da possibilidade de procurar por outros elementos e interagir com eles.


Enjoy!