Season Libraries - Ep. 02: Library Sikuli - Automação GUI com reconhecimento de imagens


Olááááá Robotizadores!!! O post da vez é sobre automação de interfaces GUI com reconhecimento de imagens, para quem ainda não conhece, estamos falando do Sikuli!! E siiiim, o Robot Framework tem uma library para ele!!! Bora automatizar desktop também??? Vem...





01 - Instalação da library SikuliLibrary

pip install robotframework-SikuliLibrary


02 - Captura das imagens

O Sikuli utiliza reconhecimento de imagens para identificar e controlar componentes GUI, para isso vamos precisar tirar print dos componentes que você quer que ele identifique, no nosso exemplo, eu quero que ele clique no botão Iniciar do Windows, depois no ícone do Notepad++, em seguida quero que ele selecione o campo de digitação do Notepad++ para que seja digitado "Hello World" e por fim, aperte o fechar 'X' do Notepad++... Precisei das seguintes imagens:


Botão Iniciar do Windows
Ícone do Notepad++


Campo de digitação do Notepad++

Botão de fechar do Notepad++

Tire os prints da sua máquina e salve as imagens em um diretório dentro do seu projeto do Robot...





03 - Escreva seu código no Robot Framework

Segue meu exemplo... Veja que nas keywords de ação com o componente ele passa como argumento as imagens .png!!!



04 - Execute!

Aqui segue o vídeo de como é executado na minha máquina:


E aí gostaram???? O exemplo está disponível no meu GitHUB ... Abraço robotizadores!!!Até a próxima...

Comentários

  1. Olá May, tudo bem?Eu acompanho seu blog a pouco tempo e já aprendi muito sobre o Robot! Parabéns pela iniciativa e vida longa ao blog!!

    Venho utilizando automação desktop com o Robot, e descobri que o Sikuli apesar de ser uma mão na roda, tem muitos pontos de melhoria, uma delas é a velocidade de execução e a geração excessiva de reports. Existe uma biblioteca nativa do Python que faz a mesma coisa, com mais eficiência e rapidez, também bem fácil de usar. Chama-se PyAutogui - https://pyautogui.readthedocs.io/en/latest/ - Eu venho usando a um tempo já, e vi que é uma biblioteca bem documentada e bem estável, uma alternativa viável ao Sikuli, por não ser uma adatação trazida do Java e sim uma biblioteca nativa. =D

    Victor.

    ResponderExcluir
    Respostas
    1. Muuuuito obrigada pelo compartilhamento, já existe ela adaptada com keywords para o Robot veja: https://eficode.github.io/robotframework-imagehorizonlibrary/doc/ImageHorizonLibrary.html, nunca usei, por isso não temos post, se alguém usou já no Robot pode me contatar para fazermos um post!!!!
      Tks Victor!!!
      =D

      Excluir
  2. Olá May! Estou iniciando com testes automatizados para desktop e optei pelo Robot Framework. Porém estou "apanhando" pra usar essa library Sikuli, tentei usar a sugerida pelo Vitor também, mas não consegui.
    Quando tento executar os testes desse exemplo que você passou retorna erro: "java.lang.ExceptionInInitializerError: null". Já fiz várias pesquisas e tentativas, mas não encontrei muita coisa. Se puder me ajudar, ficarei grata! ;)
    Aproveitando...não consegui achar nenhum curso pra automação desktop com Robot, conhece algum?!

    Karen =)

    ResponderExcluir
    Respostas
    1. Olá Karen!!! Me manda o log.html para meu e-mail ammmayara@gmail.com por favor, que tentarei identificar o que possa ser!!! Também não conheço nenhum curso ainda pt-br =(

      Excluir
    2. Achei algo que possa ajudar:
      1 - Tenha JAVA JRE 64bits instalado
      2 - Procure a pasta do sikuli do python na sua maquina (no meu caso era c:\users\mayara.fernandes\appdata\local\programs\python\python37-32\lib\site-packages\SikuliLibrary\lib) e coloca pra não ser somente leitura
      3 - Se os passos acima não funcionarem, tente alterar o código da library:
      >> Procure o código-fonte da biblioteca no seu PC, procure o arquivo: [C:\Users\mayara.fernandes\AppData\Local\Programas\Python\Python37-32\Lib\site-packages\SikuliLibrary\sikuli.py] depois abra ele e altere na função chamada "_start_sikuli_java_process" mude de "jarList = glob.glob (libFolder + os.sep + '* .jar')" para "jarList = glob.glob (libFolder + os.sep + 'SikuliLibrary.jar')"

      Excluir
    3. Deu certíssimo! Muito obrigada!! Tinha dias que estava tentando e já estava desistindo =( rsrs...Você me salvou! \o/

      Excluir
  3. como posso usar sikuli e o selenium sem dar conflito?

    ResponderExcluir
    Respostas
    1. Declare as keywords assim:
      SeleniumLibrary.Input Text e SikuliLibrary.Input Text

      Excluir
  4. Olá!
    Existe alguma outra maneira para inserir texto que não seja o "Input Text"? Uma em que eu não precise passar uma imagem, apenas fazer com que ele digite um determinado texto.

    ResponderExcluir
    Respostas
    1. Creio que seja essa KW:
      Paste Text image, text Paste text. Image could be empty

      Link: http://rainmanwy.github.io/robotframework-SikuliLibrary/doc/SikuliLibrary.html#Paste%20Text

      Excluir
    2. Consegui uma solução melhor, instalei a ImageHorizonLibrary, o comando "Type" dela me permite inserir texto nos campos sem precisar tirar print, basta que o cursor esteja no campo, o mesmo comando me permite pressionar a tecla "tab", para preencher uma tela de cadastro por exemplo eu vou inserindo o texto e em seguida pressionando "tab", repeti até preencher toda a tela de cadastro.

      Excluir
  5. Olá! Sou eu de novo rsrsrs
    Já te ocorreu ter dois ou mais ícones iguais em uma tela e precisar especificar em qual deles é para efetuar o click?

    ResponderExcluir
    Respostas
    1. Olá!!! Nunca me ocorreu, na verdade já, mas ao redor dos ícones era diferente, daí fiz o print incluindo esses arredores e daí deu certo. Talvez o seu caso, se realmente não der para incluir as diferenças no print, teria que usar o Click Region (http://rainmanwy.github.io/robotframework-SikuliLibrary/doc/SikuliLibrary.html#Click%20Region), porém eu nunca precisei usar, precisa ver exemplos certinho e testar!

      Excluir
    2. Pois é, eu também fiz assim, tentando pegar ao redor de forma que ficasse diferente um do outro pra ele identificar, perguntei pois talvez houvesse uma forma melhor. Cheguei a olhar o Click Region mas acho que se eu usar ele e precisar rodar em uma tela diferente pode dar erro.

      Excluir
    3. Olá Élton, só compartilhando uma possibilidade use a função de criar uma região, você iria delimitar a região aonde consta o ícone desejado.

      Excluir

Postar um comentário

Postagens mais visitadas deste blog

[ATUALIZADO] Season Libraries - Ep. 01: Library Faker para informações aleatórias e fakes

Novo Curso: Robot Framework com Playwright e GitHub Actions

Season WEB Testing - Ep. 03: Open Browser - Chrome Options