{"id":53,"date":"2016-02-04T21:54:36","date_gmt":"2016-02-05T01:54:36","guid":{"rendered":"http:\/\/vanilton.net\/blog\/?p=53"},"modified":"2016-03-13T18:53:35","modified_gmt":"2016-03-13T22:53:35","slug":"sikulix-parte-1-ide","status":"publish","type":"post","link":"https:\/\/www.vanilton.net\/blog\/automacao\/2016\/02\/04\/sikulix-parte-1-ide\/","title":{"rendered":"SikuliX Parte 1 &#8211; IDE"},"content":{"rendered":"<p>Ol\u00e1 galera,<\/p>\n<p>H\u00e1\u00a0algum tempo me pediram para fazer um post sobre SikuliX, ent\u00e3o com um pouco de atraso vou iniciar\u00a0uma s\u00e9rie de posts falando sobre esta ferramenta e como podemos utiliz\u00e1-la. Para quem n\u00e3o a conhece SikuliX est\u00e1 \u00e9 uma ferramenta capaz de automatizar atrav\u00e9s de intera\u00e7\u00f5es com qualquer elemento exibido na tela, basicamente SikuliX realiza uma an\u00e1lise de imagem do que \u00e9 exibido na tela a cada comando, e ao localizar a imagem cuja voc\u00ea espera, voc\u00ea ser\u00e1 capaz de realizar estrat\u00e9gias de (click, hold, double click, right click, send text) entre outras neste ponto da tela. Al\u00e9m de trabalhar com as imagens SikuliX tamb\u00e9m \u00e9 capaz de utilizar\/capturar recursos nativos do SO como uso do teclado, abrir e fechar aplica\u00e7\u00f5es, coletar informa\u00e7\u00f5es do sistema entre outras.<\/p>\n<p>Depois dessa breve introdu\u00e7\u00e3o, neste post inicial da s\u00e9rie irei abordar a SikuliX IDE e alguns recursos que ela pode nos prov\u00ea, lembrando que podemos criar scripts tamb\u00e9m atrav\u00e9s da SikuliX Scripts que ser\u00e1 abordado nos pr\u00f3ximos posts. Nas pr\u00f3ximas se\u00e7\u00f5es irei abordar a instala\u00e7\u00e3o e como realizar alguns testes simples na IDE. Ent\u00e3o vamos l\u00e1!<\/p>\n<h1>Requisitos\u00a0SikuliX IDE<\/h1>\n<p>Para realizar a instala\u00e7\u00e3o devemos ter o seguinte ambiente configurado:<\/p>\n<ol>\n<li>Estar com o Java 1.7+ instalado, preferencialmente Java Development Kit (JDK) com JAVA_HOME definido no PATH do sistema.<\/li>\n<li>Possuir o instalador sikulixsetup.jar, este pode ser baixado em <a href=\"http:\/\/nightly.sikuli.de\/\" target=\"_blank\">http:\/\/nightly.sikuli.de\/<\/a> no link\u00a0<a href=\"https:\/\/oss.sonatype.org\/content\/groups\/public\/com\/sikulix\/sikulixsetup\/1.1.1-SNAPSHOT\/sikulixsetup-1.1.1-20151126.001204-18-forsetup.jar\" target=\"_blank\">sikulixsetup&#8230;.jar<\/a>.<\/li>\n<li>Possuir conex\u00e3o com a internet para download das bibliotecas do sikulisetup.<\/li>\n<\/ol>\n<h1>Instala\u00e7\u00e3o SikuliX IDE<\/h1>\n<ol>\n<li>Criar uma pasta e adicionar o sikulixsetup.jar.<\/li>\n<li>Executar o arquivo dois cliques ou atrav\u00e9s da linha de comando java -jar sikulixsetup.jar considerando que voc\u00ea esteja no path da pasta.<\/li>\n<li>Marque as op\u00e7\u00f5es conforme abaixo e clique em Setup Now.<img loading=\"lazy\" class=\"size-full wp-image-54\" src=\"http:\/\/vanilton.net\/blog\/wp-content\/uploads\/2016\/02\/setupsikulixide.png\" alt=\"Sikulix Setup\" width=\"981\" height=\"533\" srcset=\"https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/02\/setupsikulixide.png 981w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/02\/setupsikulixide-300x163.png 300w\" sizes=\"(max-width: 981px) 100vw, 981px\" \/><\/li>\n<li>Caso questionado sobre o Download de bibliotecas confirme Sim, baixando-as\u00a0no local atual.<\/li>\n<li>Caso questionado se deseja baixar a bibliotecas Jython, tamb\u00e9m confirme Sim.<\/li>\n<li>Ap\u00f3s a conclus\u00e3o da instala\u00e7\u00e3o para SO Windows e Linux ser\u00e1 exibido um execut\u00e1vel runIDE, para MAC OS ser\u00e1 gerado um Sikulix.app. Enjoy!<\/li>\n<li>Caso ocorra algum problema podes verificar melhores detalhes em\u00a0<a href=\"http:\/\/nightly.sikuli.de\/\" target=\"_blank\">http:\/\/nightly.sikuli.de\/<\/a>.<\/li>\n<\/ol>\n<h1>Aplica\u00e7\u00e3o de exemplo<\/h1>\n<p>Nesta s\u00e9rie de posts usarei uma aplica\u00e7\u00e3o em Swing para demonstrar os comandos da SikuliX IDE e para os pr\u00f3ximos posts com SikuliX Scripts. A aplica\u00e7\u00e3o est\u00e1 dispon\u00edvel em <a href=\"https:\/\/github.com\/Vanilton18\/examples-sikuli\" target=\"_blank\">https:\/\/github.com\/Vanilton18\/examples-sikuli<\/a>\u00a0para abri-la basta executar a classe Main como JavaApplication. Caso n\u00e3o queira executar \u00a0projeto pode baixar o .jar execut\u00e1vel em\u00a0<a href=\"https:\/\/github.com\/Vanilton18\/examples-sikuli\/releases\/download\/v1.0\/examples-sikuli.jar\" target=\"_blank\">https:\/\/github.com\/Vanilton18\/examples-sikuli\/releases\/download\/v1.0\/examples-sikuli.jar<\/a><\/p>\n<h1>Let&#8217;s Go SikuliX IDE<\/h1>\n<figure id=\"attachment_55\" aria-describedby=\"caption-attachment-55\" style=\"width: 840px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" class=\"size-large wp-image-55\" src=\"http:\/\/vanilton.net\/blog\/wp-content\/uploads\/2016\/02\/sikulixIDE-1024x571.png\" alt=\"Sikulix Interface\" width=\"840\" height=\"468\" srcset=\"https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/02\/sikulixIDE-1024x571.png 1024w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/02\/sikulixIDE-300x167.png 300w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/02\/sikulixIDE-1200x669.png 1200w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/02\/sikulixIDE.png 1280w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><figcaption id=\"caption-attachment-55\" class=\"wp-caption-text\">Sikulix Interface<\/figcaption><\/figure>\n<p>Acima podemos ver a SikuliX IDE, na lateral \u00e9 exibido alguns comandos b\u00e1sicos j\u00e1 mencionados no in\u00edcio do post, no menu superior op\u00e7\u00f5es de captura de imagem, adi\u00e7\u00e3o de imagem e alguns comandos como Region e Offset\u00a0que buscam aprimorar a localiza\u00e7\u00e3o das imagens, por fim os\u00a0\u00a0comandos de execu\u00e7\u00e3o. Na imagem acima tamb\u00e9m \u00e9 poss\u00edvel notar no canto direito a palavra (python), \u00e9 isso mesmo que voc\u00ea pensou a SikuliX IDE utiliza python para escrita de seus scripts, mas vamos fazer exemplos que sejam simples de compreender afinal o objetivo principal n\u00e3o \u00e9 a linguagem python e sim o entendimento da ferramenta. \u00a0Mais detalhes da IDE vamos descobrindo aos poucos.<\/p>\n<p>Ent\u00e3o vamos \u00e0 a\u00e7\u00e3o!<\/p>\n<h1>Primeiros Comandos na SikuliX IDE<\/h1>\n<p>Considerando a aplica\u00e7\u00e3o de exemplo aberta, vamos realizar nossos primeiros comandos com a IDE.<\/p>\n<p>OBS: Todos estes exemplos est\u00e3o dispon\u00edveis em\u00a0<a href=\"https:\/\/github.com\/Vanilton18\/examples-sikuli-test-sikulixide\" target=\"_blank\">https:\/\/github.com\/Vanilton18\/examples-sikuli-test-sikulixide<\/a>\u00a0bastando apenas importar para realizar os testes.<\/p>\n<p><object data=\"http:\/\/vanilton.net\/sikuli\/helloworld\/HelloWorldSikuliXIDE.html\" width=\"610\" height=\"250\"><embed src=\"http:\/\/vanilton.net\/sikuli\/helloworld\/HelloWorldSikuliXIDE.html\" width=\"610\" height=\"610\" \/><\/object><\/p>\n<p>Primeiramente \u00e9 bem estranho ver uma imagem no meio do c\u00f3digo na IDE, mas este era o objetivo de quem criou a ferramenta, programar de forma &#8220;visual&#8221; :). A IDE neste ponto ajudar\u00e1 bastante no recorte das imagens, processo bem f\u00e1cil apenas um clique na op\u00e7\u00e3o &#8220;Capturar Imagem&#8221;, ou diretamente no menu lateral usando uma das fun\u00e7\u00f5es prontas como o click, hold e etc, e selecionar a \u00e1rea que deseja que o SikuliX IDE realize a intera\u00e7\u00e3o.<\/p>\n<p>O script acima realizar\u00e1 uma procura pela imagem passada dentro da condi\u00e7\u00e3o de if, o comando sikuli &#8220;exists&#8221; avaliar\u00e1 se a imagem existe ou n\u00e3o, e seu retorno ser\u00e1 true ou false.<\/p>\n<p>Isso mesmo voc\u00ea fez um if com uma imagem \ud83d\ude00<\/p>\n<p>Caso a imagem seja encontrada ser\u00e1 exibido um popup com o texto &#8216;Uhuu! Encontrei o app aberto!&#8217; sen\u00e3o ser\u00e1 exibido o popup com o texto &#8216;Oops! N\u00e3o encontrei o app aberto&#8217;. Voc\u00ea pode testar a execu\u00e7\u00e3o do projeto com a aplica\u00e7\u00e3o vis\u00edvel e invis\u00edvel para validar os dois popups.<\/p>\n<p>OBS:<\/p>\n<pre>Caso o tempo para selecionar a imagem a ser recortada esteja muita curto, voc\u00ea pode aument\u00e1-lo nas Prefer\u00eancias -&gt; Capturando Tela.<\/pre>\n<pre>O comando .decode(<span class=\"pl-s\"><span class=\"pl-pds\">'<\/span>utf8<span class=\"pl-pds\">'<\/span><\/span>) ao final da string \u00e9 apenas mostrar corretamente as strings acentuadas.<\/pre>\n<p>Bem simples n\u00e3o!?<\/p>\n<h1>Intera\u00e7\u00f5es B\u00e1sicas\u00a0SikuliX IDE<\/h1>\n<p><object data=\"http:\/\/vanilton.net\/sikuli\/interacoes\/Interacoes.html\" width=\"610\" height=\"550\"><embed src=\"http:\/\/vanilton.net\/sikuli\/interacoes\/Interacoes.html\" width=\"610\" height=\"610\" \/><\/object><\/p>\n<p>O script acima j\u00e1 demonstra outras fun\u00e7\u00f5es como click, find (busca por imagem, esta fun\u00e7\u00e3o retorna exce\u00e7\u00e3o caso n\u00e3o localize) e hover (levar o ponteiro do mouse sobre a imagem esperada).<\/p>\n<p><object data=\"http:\/\/vanilton.net\/sikuli\/interacoesInputPaste\/InteracoesInputPaste.html\" width=\"610\" height=\"550\"><embed src=\"http:\/\/vanilton.net\/sikuli\/interacoesInputPaste\/InteracoesInputPaste.html\" width=\"610\" height=\"610\" \/><\/object><\/p>\n<p>No script acima j\u00e1 podemos observar 3 novos comandos (text, paste e wait). De forma bem simples o &#8220;text&#8221; simula uma entrada de texto &#8220;one by one&#8221; um caracter de cada vez, enquanto o &#8220;paste&#8221; envia toda a string uma \u00fanica vez, outro item a se observar nessas duas fun\u00e7\u00f5es \u00e9 que elas podem ou n\u00e3o ter uma imagem como par\u00e2metro, esta imagem caso adicionada seria o local onde o texto iria ser inserido\/colado, caso contr\u00e1rio o texto ser\u00e1 enviado para o campo onde estiver o foco.<\/p>\n<p>O comando wait tamb\u00e9m \u00e9 bem simples ele faz a espera pela imagem passada como par\u00e2metro, ele opcionalmente pode ter um segundo par\u00e2metro que seria o seu timeout em segundos. Nos pr\u00f3ximos posts entraremos em mais detalhes de waits.<\/p>\n<p>Seguindo a sequ\u00eancia do script de teste, ser\u00e1 realizado a valida\u00e7\u00e3o de um nome diferente do esperado e conforme o esperado.<\/p>\n<p>Creio que este post ficou um pouco longo, mas para facilitar o entendimento melhor sobrar detalhes do que faltar \ud83d\ude42<\/p>\n<p>Nas pr\u00f3ximas semanas espero continuar a s\u00e9rie de posts sobre o SikuliX concluindo a IDE e iniciando o SikuliX Scripts.<\/p>\n<p>At\u00e9 mais!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 galera, H\u00e1\u00a0algum tempo me pediram para fazer um post sobre SikuliX, ent\u00e3o com um pouco de atraso vou iniciar\u00a0uma s\u00e9rie de posts falando sobre esta ferramenta e como podemos utiliz\u00e1-la. Para quem n\u00e3o a<a class=\"read-more\" href=\"https:\/\/www.vanilton.net\/blog\/automacao\/2016\/02\/04\/sikulix-parte-1-ide\/\">Continue reading<\/a><\/p>\n","protected":false},"author":1,"featured_media":121,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2,8,9,5,10],"tags":[18,20],"wppr_data":[],"_links":{"self":[{"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/posts\/53"}],"collection":[{"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/comments?post=53"}],"version-history":[{"count":15,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/posts\/53\/revisions"}],"predecessor-version":[{"id":141,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/posts\/53\/revisions\/141"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/media\/121"}],"wp:attachment":[{"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/media?parent=53"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/categories?post=53"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/tags?post=53"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}