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...
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!!
ResponderExcluirVenho 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.
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!!!!
ExcluirTks Victor!!!
=D
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.
ResponderExcluirQuando 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 =)
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 =(
ExcluirAchei algo que possa ajudar:
Excluir1 - 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')"
Deu certíssimo! Muito obrigada!! Tinha dias que estava tentando e já estava desistindo =( rsrs...Você me salvou! \o/
Excluircomo posso usar sikuli e o selenium sem dar conflito?
ResponderExcluirDeclare as keywords assim:
ExcluirSeleniumLibrary.Input Text e SikuliLibrary.Input Text
Olá!
ResponderExcluirExiste 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.
Creio que seja essa KW:
ExcluirPaste Text image, text Paste text. Image could be empty
Link: http://rainmanwy.github.io/robotframework-SikuliLibrary/doc/SikuliLibrary.html#Paste%20Text
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.
ExcluirOlá! Sou eu de novo rsrsrs
ResponderExcluirJá te ocorreu ter dois ou mais ícones iguais em uma tela e precisar especificar em qual deles é para efetuar o click?
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!
ExcluirPois é, 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.
ExcluirOlá É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