tag:blogger.com,1999:blog-2648692948553617882024-03-27T16:53:25.717-07:00Robotizando Testes
Blog de Qualidade de Software
com foco em Testes Automatizados
com Robot Framework.
Vamos robotizar!Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.comBlogger49125tag:blogger.com,1999:blog-264869294855361788.post-61427307290693925172023-04-18T10:29:00.005-07:002024-03-03T16:59:30.222-08:00Novo Curso: Robot Framework com Playwright e GitHub Actions<div class="separator" style="clear: both; text-align: center;"><span style="font-family: verdana; margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="400" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5N1_Bgt36fuAorEpn4j1gHZGjbTRjHVBBRLe1PWKooCSbohE4ZTbij8mx0Bdex5Y1mq3srYBnWzgXXxuWOCjkp2hR4NC_p4sZ2hoe-jFhjau8HgZZosBorNtGYFupFOse4vt4uhv9GstH/s320/robotfw_mark_black_low.png" width="320" /></span></div><p>O<span style="font-family: verdana;">láááá de volta robotizadores!!! Desde 2018 nosso curso está no AR na Udemy, sendo um sucesso entre os alunos! E nesse post de hoje trago novidades:</span></p><p></p><ul style="text-align: left;"><li><span style="font-family: verdana;">O curso básico foi atualizado com conteúdo regravado em 2023!</span></li><li><span style="font-family: verdana;">O curso avançado está em dia!</span></li><li><span style="font-family: verdana;">E agora temos o novo curso <b><span style="color: #f1c232;"><a href="https://www.udemy.com/course/robot-framework-com-playwright-e-github-actions/?referralCode=0D43812C7C0C988FC1ED" target="_blank">Robot Framework com Playwright e GitHub Actions</a></span></b>, que trás a união dessas 3 poderosas ferramentas para automação de testes WEB!</span></li></ul><p></p><span style="font-family: verdana;"><span face=""><br /></span><span face="">Se liga nos cupons e vem robotizar com os mais de 6 mil alunos!!</span><span face=""><br /></span><br /></span><h2><span style="font-family: verdana;">Promoção</span></h2><div><span style="font-family: verdana;"><span face="">Aproveita!!! Cupom:<b> </b></span><span face=""><span face=""><span style="color: #ffd966;"><b>ROBOT_RF2_2024 </b></span>válido até <b>29/03/2024</b></span></span><b> - 23h59</b><span face="">:</span><br /><span face=""><br /></span></span><div><b><span style="font-family: verdana;">⭐Básico:</span></b><b><span style="font-family: verdana;"> </span></b><a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?couponCode=ROBOT_RF2_2024"><span style="font-family: verdana;"><b><span></span>https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?couponCode=</b></span><span style="color: #0000ee; font-family: verdana;"><b><u>ROBOT_RF2_2024</u></b></span></a></div></div><div><br /></div><div><div><b><span style="font-family: verdana;">⭐⭐Avançado: </span></b><a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-avancado/?couponCode=ROBOT_RF2_2024"><span style="font-family: verdana;"><b>https://www.udemy.com/course/automacao-de-testes-com-robot-framework-avancado/?couponCode=</b></span><span style="color: #0000ee; font-family: verdana;"><b><u>ROBOT_RF2_2024</u></b></span></a></div><div><span style="color: #0000ee; font-family: verdana;"><b><u><br /></u></b></span></div><div><span style="font-family: verdana;"><b>🆕 </b></span><b><span style="font-family: verdana;">Playwright com GitHub Actions: </span></b><a href="https://www.udemy.com/course/robot-framework-com-playwright-e-github-actions/?couponCode=ROBOT_RF2_2024"><span style="font-family: verdana;"><b>https://www.udemy.com/course/robot-framework-com-playwright-e-github-actions/?couponCode=</b></span><span style="color: #0000ee; font-family: verdana;"><b><u>ROBOT_RF2_2024</u></b></span></a></div><br /><div><span style="font-family: verdana;"><br /></span></div><div><span style="font-family: verdana;"><b><br /></b></span></div><div><span style="font-family: verdana;"><span style="color: #ffa400;"><b>Se os cursos não estiverem mais em promoção, use esses links:</b></span></span></div><div><span style="font-family: verdana;"><span style="color: #ffa400;"><b><br /></b></span><b>Básico</b>: <a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?referralCode=07AE210B34B27F2BA63C">https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?referralCode=07AE210B34B27F2BA63C</a></span></div><div><span style="font-family: verdana;"><b><br /></b></span></div><div><span style="font-family: verdana;"><b>Avançado: </b></span><span style="font-family: verdana;"><a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-avancado/?referralCode=D8A16D5A4F4A3660792B">https://www.udemy.com/course/automacao-de-testes-com-robot-framework-avancado/?referralCode=D8A16D5A4F4A3660792B</a></span></div><div><span style="font-family: verdana;"><br /></span></div><div><span style="font-family: verdana;"><b style="font-family: "Times New Roman";"><span style="font-family: verdana;">Playwright com GitHub Actions: </span></b></span><span style="font-family: verdana;"><a href="https://www.udemy.com/course/robot-framework-com-playwright-e-github-actions/?referralCode=0D43812C7C0C988FC1ED">https://www.udemy.com/course/robot-framework-com-playwright-e-github-actions/?referralCode=0D43812C7C0C988FC1ED</a></span></div><h2><span style="font-family: verdana;"><br /></span></h2><h2><span style="font-family: verdana;">Instrutora</span></h2><h3><span face=""><span style="color: purple; font-family: verdana;"><i style="box-sizing: border-box;"><a class="instructor--title__link--1NJ6S" href="https://www.udemy.com/user/mayara-ribeiro-fernandes/" style="box-sizing: border-box; text-decoration-line: none;">Mayara "May" Fernandes</a></i></span></span></h3><h4><span style="font-family: verdana;">Specialist QA Engineer</span></h4><div style="text-align: justify;"><span style="font-family: verdana;">Desde 2010 na área de testes de software, bacharel em Ciência da Computação, certificada CTAL-Test Automation Engineer, experiência com testes manuais e automatizados de desktop, web, mobile, API e micro-serviços. Atualmente trabalha como <b><i><a href="https://www.linkedin.com/in/mayfernandes/" target="_blank">Specialist QA Engineer</a></i></b> na <b><a href="https://neon.com.br/" target="_blank">Neon Pagamentos S.A.</a></b> e já atuou como <i><b>tech leader</b></i> na implantação de testes automatizados com <i>Robot Framework</i> e <i>Continuous Testing</i>. Apaixonada por automação e <i>agile testing</i>, gosta de compartilhar conhecimento e trazer novos <i>testers </i>e QAs para o mundo mágico da automação de testes!</span></div></div>Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com2tag:blogger.com,1999:blog-264869294855361788.post-46364612298865926932021-01-13T05:10:00.012-08:002021-08-05T17:18:50.450-07:00Season WEB Testing - Ep. 03: Open Browser - Chrome Options<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0HIkTbGBWehvdc1SNyielRo4NaN-DQac54yZvRMftn6QNrj0d90Av8LCftHRScRjwV7BI4gbw2cFO3kV6fGt4p7bDx5d9h584DjPI-depJJGduDXCXgrIGD_Xr6FFUiA5-F2JDjYCG4x0/s512/if_Robot_11_385841.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0HIkTbGBWehvdc1SNyielRo4NaN-DQac54yZvRMftn6QNrj0d90Av8LCftHRScRjwV7BI4gbw2cFO3kV6fGt4p7bDx5d9h584DjPI-depJJGduDXCXgrIGD_Xr6FFUiA5-F2JDjYCG4x0/s320/if_Robot_11_385841.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div>Oláááááá Robotizadores!! Fazia um tempinho que eu não postava aqui, mas a May tá de volta com um post que pode ajudar o pessoal que lida com diferentes configurações do Chrome nos testes Web!!!!! Chega aí....<div><br /></div><div><br /></div><h1 style="text-align: left;"><span style="color: #f1c232;">Utilizando os </span><i style="color: #f1c232;">Options </i><span style="color: #f1c232;">do Chromedriver</span></h1><div><div>Quando você usa a <i><b><span style="color: #f1c232;"><a href="http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Open%20Browser" target="_blank">Open Browser</a></span></b></i> para abrir o seu navegador Chrome, por padrão ele instância um navegador "zerado" de configurações, mas se você precisa que algo seja parametrizado nesse Chrome, veja as opções que você pode usar no argumento "<b><i><span style="color: #f1c232;">options</span></i></b>" da <b><i><span style="color: #f1c232;"><a href="http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Open%20Browser" target="_blank">Open Browser</a></span></i></b>.</div><div><br /></div><div>Saiba mais sobre em: <a href="https://chromedriver.chromium.org/capabilities " target="_blank">https://chromedriver.chromium.org/capabilities </a></div><div><br /></div><div>Você pode passar quantos <b><i><span style="color: #f1c232;">options </span></i></b>necessitar separando-os com ponto e vírgula, ficaria algo assim:</div><div><br /></div><div><div><i><b><span style="color: #f1c232;">*** Keywords ***</span></b></i></div><div><i><b><span style="color: #f1c232;">Acessar Site</span></b></i></div><div><i><b><span style="color: #f1c232;"> Open Browser https://the-internet.herokuapp.com/download chrome</span></b></i></div><div><i><b><span style="color: #f1c232;"> ... options=add_argument("--disable-web-security");add_argument("--start-maximized");add_experimental_option("excludeSwitches", ["enable-logging"])</span></b></i></div></div><div><i><b><span style="color: #f1c232;"><br /></span></b></i></div><h2 style="text-align: left;"><span style="color: #f1c232;"><i>Options </i>Disponíveis</span></h2><div>Nem todas as <i><b><span style="color: #f1c232;">options</span></b> </i>existentes estão listadas aqui, se você conhece alguma que não está aqui, deixa ela descrita nos comentários, por favor!</div><div><br /></div><h4 style="text-align: left;"><b><span style="color: #f1c232;">Abrir em Aba Anônima</span></b></h4><div><span style="white-space: pre;"> </span><i>add_argument("--incognito")</i></div><div><br /></div><h4 style="text-align: left;"><span style="color: #f1c232;"><b>Remover log do DevTools Chrome</b></span></h4><div><span style="white-space: pre;"> </span><i>add_experimental_option("excludeSwitches", ["enable-logging"])</i></div><div><br /></div><h4 style="text-align: left;"><span style="color: #f1c232;"><b>Para sites em HTTPS, evitando alertas de certificados</b></span></h4><div><span style="white-space: pre;"> </span><i>add_argument("--ignore-certificate-errors")</i></div><div><br /></div><h4 style="text-align: left;"><span style="color: #f1c232;"><b>Bloquear Pop-ups</b></span></h4><div><span style="white-space: pre;"> </span><i>add_argument("--disable-popup-blocking")</i></div><div><span style="white-space: pre;"> </span></div><h4 style="text-align: left;"><span style="color: #f1c232;"><b>Bloquear Notificações</b></span></h4><div><span style="white-space: pre;"> </span><i>add_argument("--disable-notifications")</i></div><div><br /></div><h4 style="text-align: left;"><span style="color: #f1c232;"><b>Iniciando já maximizado</b></span></h4><div><span style="white-space: pre;"> </span><i>options=add_argument("--start-maximized")</i></div><div><span style="white-space: pre;"> </span></div><h4 style="text-align: left;"><b><span style="color: #f1c232;">Não aplicar política de segurança</span></b></h4><div><span style="white-space: pre;"> </span><i>add_argument("--disable-web-security")</i></div><div><br /></div><h4 style="text-align: left;"><b><span style="color: #f1c232;">Configurando um diretório para download</span></b></h4><div>(<a href="dá pra testar em https://the-internet.herokuapp.com/download" target="_blank">dá pra testar em https://the-internet.herokuapp.com/download</a>)</div><div><br /></div><div><span style="white-space: pre;"> </span><i>${prefs} Create Dictionary download.default_directory=C:\\Documentos</i></div><div><i><span style="white-space: pre;"> </span>options=add_experimental_option('prefs', ${prefs})</i></div><div><br /></div><h4 style="text-align: left;"><span style="color: #f1c232;"><b>Instalando Extensões</b></span></h4><div>Para instalar uma extensão você precisará do arquivo .crx dela, a extensão de Chrome chamada "<a href="https://chrome.google.com/webstore/detail/get-crx/dijpllakibenlejkbajahncialkbdkjc" target="_blank">Get CRX</a>" gera esse arquivo para você, <a href="https://chrome.google.com/webstore/detail/get-crx/dijpllakibenlejkbajahncialkbdkjc" target="_blank">veja as instruções clicando aqui</a>. Depois que você tiver esse arquivo, use o exemplo abaixo:</div><div><br /></div><div><span style="white-space: pre;"> </span><i>add_extension("path\\to\\extension.crx")</i></div><div><span style="white-space: pre;"> </span></div><div><span> </span><span> </span>Exemplo: <i>add_extension("C:\\ProjetosRobotFramework\\TruePath.crx")</i></div></div><div><i><br /></i></div><div><h4><b><span style="color: #f1c232;">Execução sem tela (para execução em <i>containers</i>) - Sugestão de Fabio Mendonça</span></b></h4><div><span style="white-space: pre;"> </span><i>add_argument("--headless")</i></div></div><div><i><br /></i></div><div><h4><b><span style="color: #f1c232;">Definindo tamanho da janela</span></b></h4></div><div><i><span> </span><span> </span>add_argument("--window-size=1920,1080")</i></div><div><i><br /></i></div><div><div><h4><span style="color: #f1c232;">Para utilizar a renderização no formato mobile - Sugestão de Marcos Barbosa</span></h4></div><div style="font-style: italic;"><span> </span>&{mobile_emulation} Create Dictionary deviceName=Galaxy S5</div><div style="font-style: italic;"><br /></div><div style="font-style: italic;"><span> </span>Open Browser https://www.facebook.com Chrome options= add_experimental_option("mobileEmulation",${mobile_emulation})</div><div style="font-style: italic;"><br /></div></div><div><h4><span style="color: #f1c232;">Ou com device configurado especificamente para seu teste - Sugestão de Marcos Barbosa</span></h4></div><div><i><div><span> &</span>{device metrics} Create Dictionary width=${768} height=${1366} pixelRatio=${3.0} userAgent=Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19</div><div><br /></div><div><span> </span>&{mobile_emulation} Create Dictionary deviceMetrics=${device metrics}</div><div><br /></div><div><span> </span>Open Browser https://www.facebook.com Chrome options=add_experimental_option("mobileEmulation",${mobile_emulation})</div></i></div><div><br /></div><div><i><br /></i></div><div><i><br /></i></div><div>E é isso ai galerinhaaaa!! Bons testes aí no seu Chrome!!! Lembrando que se souberem de mais alguma <i>option</i> não listada aqui, deixa nos comentários!! Até a próxima!!</div>Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com9tag:blogger.com,1999:blog-264869294855361788.post-17731318317886849122020-07-02T04:37:00.002-07:002020-07-02T04:39:30.304-07:00Season API Testing - Ep. 04: "401 unauthorized" — Agora é a hora de deixar o Robot entrar<div style="display: none;">
</div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<section class="section section--body" name="e59a"><div class="section-content">
<div class="section-inner sectionLayout--insetColumn">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL2_sxgMSjZDS3ARtp1ruT5pWN0AKoHM9fIcnBMr7eMmOp0CfK7ZenqeqNL8yRa-TSNgdRFYTdNNEpxzbsdgx_J_s_y2i9uVKAxJXubM0yAtHLg5nnYWx1K_j2E9Dhy-YB_jUE096zVLuU/s1600/if_Robot_15_385845.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL2_sxgMSjZDS3ARtp1ruT5pWN0AKoHM9fIcnBMr7eMmOp0CfK7ZenqeqNL8yRa-TSNgdRFYTdNNEpxzbsdgx_J_s_y2i9uVKAxJXubM0yAtHLg5nnYWx1K_j2E9Dhy-YB_jUE096zVLuU/s1600/if_Robot_15_385845.png" /></span></a></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 10.0pt;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;">Olááá Robotizadores, eu sou <b><span style="color: #f1c232;">Vanessa Redes</span></b> e estou invadindo esse blog (com autorização e devidamente autenticada 😁) para falar sobre como implementar requisições em APIs REST com autenticação e autorização pelo nosso Robot Framework!!! Então pega suas credenciais e vem comigo ...</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 10.0pt;"> </span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 10.0pt;"></span></div>
<h2>
<span style="color: #f1c232;"><span style="font-family: "trebuchet ms" , sans-serif;">01 - O que é Autorização e Autenticação em uma API REST?</span></span></h2>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;">Qualquer software hoje em dia
precisa ter algum controle de segurança para os acessos, as APIs disponibilizam
vários tipos de Autenticação, hoje vamos tratar de duas delas, a <b><span style="color: #f1c232;">Básica </span></b>e
o <b><span style="color: #f1c232;">Bearer </span></b>com o seu <i><span style="color: #f1c232;"><b>JWT</b></span></i>.<span style="font-size: 13.5pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 10.0pt;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaB91BNNI_yTmEJb2NoTqUgilft_gaxxmWfv98Se9M3d7kTuMtr0O1UE3MVRkEqcWErsXv76lgsAidFWtHfNlyEe3eqCpRe36XlAoURHh3CEaYvDOvUOotrgXW9JVu8oXQdT9-AxvI2mh3/s1400/Autentica+%25281%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="425" data-original-width="1400" height="189" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaB91BNNI_yTmEJb2NoTqUgilft_gaxxmWfv98Se9M3d7kTuMtr0O1UE3MVRkEqcWErsXv76lgsAidFWtHfNlyEe3eqCpRe36XlAoURHh3CEaYvDOvUOotrgXW9JVu8oXQdT9-AxvI2mh3/w625-h189/Autentica+%25281%2529.png" width="625" /></span></a></div>
<div class="MsoNormal" style="line-height: normal; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12.0pt;">A primeira coisa que devemos esclarecer é o
significado de <span style="color: #f1c232;"><b>Autorização</b> </span>e <b><span style="color: #f1c232;">Autenticação</span></b>, essa é fácil.<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #f1c232; font-size: 12.0pt;">Autorização </span></b><span style="font-size: 12.0pt;">é o que você <i>pode fazer</i>,
digamos que você tem acesso à Casa Branca mas não tem autorização para entrar
no Salão Oval, <i>ficou fácil?</i></span><span style="font-size: 12.0pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">E a <b><span style="color: #f1c232;">Autenticação </span></b>é <i>quem
você é</i>, ou seja, é o guarda na entrada da Casa Branca verificando sua
Identidade para ver se você é mesmo você.</span><span style="font-size: 12.0pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioqZb2uE5wDXcwluGsyF0ETZX83v9CQA1fU3JWPwsSx0wmnOWr2XK-EO-UNPiiTSDdtXe1jQVPN02Udr920ssUhoLBsz5nnZQA9_B-ogstXUY072ywzo4BoV0lCFo1H7xMQQCZyjsrl-n2/s1400/Autentica.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="425" data-original-width="1400" height="151" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioqZb2uE5wDXcwluGsyF0ETZX83v9CQA1fU3JWPwsSx0wmnOWr2XK-EO-UNPiiTSDdtXe1jQVPN02Udr920ssUhoLBsz5nnZQA9_B-ogstXUY072ywzo4BoV0lCFo1H7xMQQCZyjsrl-n2/w500-h151/Autentica.png" width="500" /></span></a></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">O mais
engraçado é que quando você acessa a sua <b>API </b>sem <i>token</i>, com
<i>token </i>incorreto ou até mesmo com <i>token</i> que não tem autorização o erro que vai
retornar é sempre o <b>“<span style="color: #f1c232;">401 unauthorized</span>”</b>, de certa forma está errada, pois as vezes deveria ser “<b><span style="color: #f1c232;">Not authenticated</span></b>”, ou seja, eu nem sei quem você é.</span><span style="font-size: 12.0pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<br /></div>
<h2>
<span style="color: #f1c232;"><span style="font-family: "trebuchet ms" , sans-serif;">02 - <i>Basic Authentication</i> no Robot</span></span></h2>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 16px;">Falando nessas </span><i style="font-family: "Trebuchet MS", sans-serif; font-size: 16px;">autorizações/autenticações</i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 16px;"> existem vários tipos com protocolos e formas distintas. A mais simples de todas é a </span><b style="font-family: "Trebuchet MS", sans-serif; font-size: 16px;"><span style="color: #f1c232;">Basic Authentication</span></b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 16px;">, que é o básico “</span><i style="font-family: "Trebuchet MS", sans-serif; font-size: 16px;">usuário</i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 16px;">” e “</span><i style="font-family: "Trebuchet MS", sans-serif; font-size: 16px;">senha</i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 16px;">” enviados no </span><i style="font-family: "Trebuchet MS", sans-serif; font-size: 16px;">header </i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 16px;">da </span><b style="font-family: "Trebuchet MS", sans-serif; font-size: 16px;">API</b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 16px;">.</span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 16px;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">Vamos com
um exemplo, para fazer essa autenticação do tipo básico devemos enviar as
credenciais na hora de <u>criar a sessão com a API</u>, no campo “<b><span style="color: #f1c232;">auth</span></b>”, assim todas
as rotas acessadas dessa API terão a “<span style="color: #f1c232;"><b>auth</b></span>” já salva. </span></span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">O nosso
Robot é super esperto e já entende que essa API requer uma autenticação do
tipo </span><i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt;">Basic</i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">. </span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">Nas
variáveis </span><span style="color: #f1c232; font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">${email}</span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"> e </span><span style="color: #f1c232; font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">${senha}</span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"> devem ser passadas as informações do usuário para
acessar a API.</span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<script src="https://gist.github.com/redesvanessa/725807c34ee626d8624aee31d957c432.js"></script></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; text-align: center;">
<h2 style="text-align: left;">
<span style="color: #f1c232;"><span style="font-family: "trebuchet ms" , sans-serif;">03 - <i>Bearer Authentication</i> no Robot</span></span></h2>
</div>
</div>
</div>
</section><br />
<section class="section section--body" name="e59a"><div class="section-content">
<div class="section-inner sectionLayout--insetColumn">
<div class="graf graf--p graf--empty" name="9e06">
</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNZuoHnFdniAC5_nmmMJ_cToTgTh34mSlX5j-PFmEMXvAqFvN68wzJ9w0ShbCu9yH2nACNSTBl-c21dcPPJysuqD7L3jUvkU2bvsqWnLRlY5SSQCQtkFDdz-5_on_667STCx4faDHR1bCJ/s1400/Autentica+%25282%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="425" data-original-width="1400" height="151" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNZuoHnFdniAC5_nmmMJ_cToTgTh34mSlX5j-PFmEMXvAqFvN68wzJ9w0ShbCu9yH2nACNSTBl-c21dcPPJysuqD7L3jUvkU2bvsqWnLRlY5SSQCQtkFDdz-5_on_667STCx4faDHR1bCJ/w500-h151/Autentica+%25282%2529.png" width="500" /></span></a></div>
<br />
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;"><span style="color: #f1c232;"><b>Bearer authentication</b></span></i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;"> (também
conhecido como </span><i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">token authentication</i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;">) é um </span><i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">Schema</i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;"> para autenticação HTTP
(RC6750).</span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 5pt; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 5pt; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #f1c232; font-size: 12pt;"><b><i>Authorization: Bearer
<token></i></b></span><span style="font-size: 12.0pt;"><o:p></o:p></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #f1c232; font-size: 12pt;"><b><br /></b></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 5.0pt;">
</div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">"<i>O Bearer identifica recursos
protegidos por um <b><span style="color: #f1c232;">OAuth2</span></b>. O <b><span style="color: #f1c232;"><token></span></b> deve ser um string. </i></span><i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">Ele representa
uma autorização do </span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">server </span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">emitida para o </span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">client</span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">. Por sua vez, o </span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">client </span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">deve
possuir mecanismos próprios para identificar e validar o </span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">Token</span></i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"><i>.</i>" </span><b style="font-family: "trebuchet ms", sans-serif;">Referência: </b><a href="https://www.brunobrito.net.br/jwt-cookies-oauth-bearer/" style="color: blue; font-family: "trebuchet ms", sans-serif;" target="_blank">https://www.brunobrito.net.br/jwt-cookies-oauth-bearer/</a><br />
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">Mas o que
é esse “</span><i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt;"><b><span style="color: #f1c232;">OAuth2</span></b></i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">”? O </span><a href="https://thiagolima.blog.br/parte-3-seguran%C3%A7a-em-apis-restful-a780bd9f186a" style="font-family: "trebuchet ms", sans-serif; font-size: 12pt;" target="_blank"><span style="color: #f1c232;"><b>Thiago Lima</b></span></a><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"> descreveu
de forma bem simples:</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 5pt; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">“<i>Não é apenas um método de
autenticação, e sim um protocolo completo com diversas especificações de
segurança. </i></span></span><i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt;">Ele é extremamente útil para o
processo de autenticação e autorização e, por isso, atualmente é o método mais
recomendado para o cenário de APIs.</i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">”</span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">Em curtas
palavras para acessar uma <b>API </b>com esse tipo de autenticação
você precisar <i>logar</i> primeiro, e depois que fizer o <i>login
com sucesso</i> a API vai retornar um <b><i>Token </i></b>(que é
aquela string criptografada). </span></span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">Esse </span><b style="font-family: "trebuchet ms", sans-serif; font-size: 12pt;"><i>Token </i></b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">vai
ser solicitado em todas as requisições seguintes, então você deve enviar sempre
no </span><i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt;">Headers </i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">da sua requisição seja ela um GET, POST, PUT,
DELETE ou outra menos conhecida.</span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">Algumas <b>APIS </b>têm
algumas regras especificas com esse <b>token</b>, e já tive o prazer de
trabalhar com três diferentes que me fizeram bater a cabeça um pouco e isso que
eu venho trazer hoje.</span><span style="font-size: 12.0pt;"><o:p></o:p></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span></div>
<div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;">
</div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">Tem
exemplo de API que você precisa só mandar o </span><b style="font-family: "Trebuchet MS", sans-serif; font-size: 12pt;">${token}</b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"> lá
no </span><i style="font-family: "Trebuchet MS", sans-serif; font-size: 12pt;">header </i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">e fica tudo pronto, como fiz no post anterior com a
</span><span style="color: #f1c232; font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"><b><a href="https://medium.com/u/466efd628dee">API da Lojinha do Júlio de Lima</a></b></span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"><br /></span></div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;">No </span><i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">Post </i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;">do Login da resposta pegamos o </span><b style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">token </b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;">e
armazenamos em uma variável, depois </span><i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">setamos</i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;"> essa como uma
variável de Suite para ser utilizada em todos os demais testes.</span><span style="font-family: "trebuchet ms" , sans-serif;"></span><br />
<div style="text-align: justify;">
<br />
<script src="https://gist.github.com/redesvanessa/cb9fbadba56b675c18e913becadaff00.js"></script><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">E nas
demais requisições só precisamos passar no <i>header </i>no
“campo” <b>token</b> a<b> </b>nossa variável. </span></span><b style="font-family: "trebuchet ms", sans-serif;"><i><span style="color: #f1c232; font-size: 12.0pt;">Impossível
ser mais simples que isso, certo? Ah sim, o Basic é ainda mais fácil.</span></i></b></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">Passei
pelas seguintes duas experiências que quero relatar aqui, algumas APIs você
precisa passar além do </span><b style="font-family: "Trebuchet MS", sans-serif; font-size: 12pt;"><i>Token </i></b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">mais alguma “</span><i style="font-family: "Trebuchet MS", sans-serif; font-size: 12pt;">coisinha</i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">”, os
exemplos que tenho são </span><b style="font-family: "Trebuchet MS", sans-serif; font-size: 12pt;">“<i><span style="color: #f1c232;">JWT</span></i>”</b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"> e o próprio </span><b style="font-family: "Trebuchet MS", sans-serif; font-size: 12pt;">“<i><span style="color: #f1c232;">Bearer</span></i>”</b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">. </span></div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12.0pt;"></span><br />
<h3>
<span style="color: #f1c232; font-family: "trebuchet ms" , sans-serif;">03.1 - Exemplo JWT</span></h3>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12.0pt;"><b style="font-size: 12pt;"><span style="color: #f1c232;">JWT </span></b><span style="font-size: 12pt;">é o próprio </span><b style="font-size: 12pt;"><i>token </i></b><span style="font-size: 12pt;">de segurança (<span style="color: #f1c232;">JWT = Json Web
Token</span>) e a </span><b style="font-size: 12pt;">API </b><span style="font-size: 12pt;">pode requisitar que você mande essa informação
junto com o </span><b style="font-size: 12pt;">TOKEN</b><span style="font-size: 12pt;">, só devemos lembrar de adicionar isso antes da
variável </span><b style="font-size: 12pt;"><span style="color: #f1c232;">${token}</span></b><span style="font-size: 12pt;">, a forma mais fácil é lá na hora de salvar essa
variável já passar a palavra JWT assim nunca vai ser esquecido e aparecer um
FAIL na sua tela.</span></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: center;">
<script src="https://gist.github.com/redesvanessa/f00339da56a33a7299882c561c227deb.js"></script>t<br />
<div style="text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;">E nas
demais requisições é só mandar o </span><b style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">${token}</b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;"> normal como você
pode ver ali no “Get Product”.</span></div>
<div style="text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;"><br /></span></div>
<h3 style="text-align: left;">
<span style="color: #f1c232; font-family: "trebuchet ms" , sans-serif;">03.2 - Exemplo <i>Bearer</i></span></h3>
<div style="text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;">E o
último exemplo do dia é uma </span><b style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">API </b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;">que requisita enviar o </span><i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">Bearer </i><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;">junto
do </span><b style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">token</b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;">, e a lógica é a mesma da </span><b style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">JWT</b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-align: justify;">, tem que enviar a
palavra antes do </span><b style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;">${token}</b></div>
<b style="font-family: "trebuchet ms", sans-serif; font-size: 12pt; text-align: justify;"><br /></b>
<br />
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><b><script src="https://gist.github.com/redesvanessa/791d5362b5f2cf9c0a4af2e47bd1d4a0.js"></script></b></span></div>
</div>
<div class="MsoNormal" style="line-height: normal; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">Outro
detalhe que quero mostrar é que usei duas formas diferentes de “<i>capturar</i>”
o <b>token </b>das respostas, uma delas foi apenas passando o <b>“<span style="color: #f1c232;">Set
Suite Variable — ${token} — ${resp.json()[‘token’]}</span></b>, simples assim pois o
<span style="color: #f1c232;">${resp.json()[‘token’]}</span> já é uma <i>string </i>então é só setar ela com escopo de suite e
continuar usando sem medo.</span><span style="font-size: 12.0pt;"><o:p></o:p></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">E a outra
foi através da <i>keyword </i><b>“<span style="color: #f1c232;">Get From Dictionary</span>”</b> da <span style="color: #f1c232;">Library </span><i><span style="color: #f1c232;">Collections</span> </i>e
nela você indica qual é o <i>Dictionary </i>no caso o JSON e indica qual o campo
separado — <b><i>token</i></b>.</span><span style="font-size: 12.0pt;"><o:p></o:p></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">Para
validar se o seu <i>token </i>está sendo capturado corretamente, lá no seu arquivo
<span style="color: #f1c232;"><b>log.html</b></span> você pode verificar ele sendo construído como segue abaixo:</span><span style="font-size: 12.0pt;"><o:p></o:p></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4jxeRMAjWxredPCnSg0mTpzA70rwOpCfWKbIYiY-U79_eph6FaTl3h89gOvjXrB35sFSbmPFvWRcskYEp8sEzFHnD9mgkeAXIkKMLBoetY0BaN6QsBqbqXx-P8izlXFOT2LQ0XiCQ4urU/s1341/logRobot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="577" data-original-width="1341" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4jxeRMAjWxredPCnSg0mTpzA70rwOpCfWKbIYiY-U79_eph6FaTl3h89gOvjXrB35sFSbmPFvWRcskYEp8sEzFHnD9mgkeAXIkKMLBoetY0BaN6QsBqbqXx-P8izlXFOT2LQ0XiCQ4urU/w625-h270/logRobot.png" /></span></a></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">Na
<i>keyword </i>“<i><span style="color: #f1c232;">Set Suite Variable</span></i>” você consegue validar se o <i>token </i>veio
corretamente.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">Outra
dica de última hora e especialmente para a fase de aprendizado é usar a keyword que loga informações do teste:</span><span style="font-size: 12.0pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 5pt; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #f1c232; font-size: 12.0pt;"><br /></span></b></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #f1c232; font-size: 12.0pt;"><i>Log To Console Meu Token JWT é:
${token}</i></span></b><span style="font-size: 12.0pt;"><o:p></o:p></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #f1c232; font-size: 12.0pt;"><i><br /></i></span></b></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">Assim
nos <i>Logs </i>será possível validar se está capturando o <b><i>token </i></b>corretamente.</span><span style="font-size: 12.0pt;"><o:p></o:p></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJl3fUYyS4xiJazGi3ZOPRvdVgpizqO4LUH_aExglqPsyZc2qYMoP8_GBnBKZ4YMdHRpNriEXPPVW6rbMNn75Sr8hF-fBz7nDE8meJzauCuwTiHcjg5sx7GH1Rdpl5wtmwbi1eUSZKxQeq/s970/logtoconsole.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="552" data-original-width="970" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJl3fUYyS4xiJazGi3ZOPRvdVgpizqO4LUH_aExglqPsyZc2qYMoP8_GBnBKZ4YMdHRpNriEXPPVW6rbMNn75Sr8hF-fBz7nDE8meJzauCuwTiHcjg5sx7GH1Rdpl5wtmwbi1eUSZKxQeq/w500-h285/logtoconsole.png" /></span></a></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12.0pt;">
</span><br />
<hr size="2" style="text-align: center;" width="100%" />
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12.0pt;">
</span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">Espero
que tenham gostado e aproveitado a leitura e o mais importante que as duvidas
tenham sido sanadas e nunca mais você leia um “<b><span style="color: #f1c232;">401 unauthorized</span></b>”</span><span style="font-size: 12.0pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><br /></span></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;">Aqui
agradeço também ao <a href="https://medium.com/u/14850ca135cb" target="_blank"><span style="color: #f1c232;">Antonio Montanha</span></a> que
teve a paciência de me tirar algumas dúvidas teóricas enquanto eu tentava
escrever esse post com essas experiências que me causaram algumas dores de
cabeça. </span><span style="font-size: 12.0pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12.0pt;">
</span><br />
<br />
<hr size="2" style="text-align: center;" width="100%" />
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12.0pt;">
</span></div>
<div class="MsoNormal" style="line-height: normal; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><b>Referências:</b></span><span style="font-size: 12.0pt;"><o:p></o:p></span></span></div>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal; text-align: justify;"><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12.0pt;"><a href="https://medium.com/u/14850ca135cb" target="_blank"><span style="color: blue; font-family: "arial" , sans-serif;">Antonio Montanha</span></a><o:p></o:p></span></li>
<li class="MsoNormal" style="line-height: normal; text-align: justify;"><span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 12.0pt;"><a href="https://medium.com/u/285ed90a9801" target="_blank"><span style="color: blue;">Mayara Fernandes</span></a> — Que sempre é um conteúdo
de referência no assunto Robot Framework</span><span style="font-size: 12.0pt;"><o:p></o:p></span></span></li>
<li class="MsoNormal" style="line-height: normal; text-align: justify;"><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12.0pt;"><a href="https://medium.com/u/ca06e94654d1" target="_blank"><span style="color: blue; font-family: "arial" , sans-serif;">QANinja</span></a><o:p></o:p></span></li>
<li class="MsoNormal" style="line-height: normal; text-align: justify;"><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12.0pt;"><a href="https://www.brunobrito.net.br/jwt-cookies-oauth-bearer/" target="_blank"><span style="color: blue; font-family: "arial" , sans-serif;">https://www.brunobrito.net.br/jwt-cookies-oauth-bearer/</span></a><o:p></o:p></span></li>
<li class="MsoNormal" style="line-height: normal; text-align: justify;"><span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="font-size: 12.0pt;"><a href="https://thiagolima.blog.br/parte-3-seguran%C3%A7a-em-apis-restful-a780bd9f186a" title="https://thiagolima.blog.br/parte-3-seguran%C3%A7a-em-apis-restful-a780bd9f186a"><span style="color: blue;">(Parte 3) Segurança em APIs RESTful</span></a> </span></b><span style="font-size: 12.0pt;"><a href="https://thiagolima.blog.br/parte-3-seguran%C3%A7a-em-apis-restful-a780bd9f186a" title="https://thiagolima.blog.br/parte-3-seguran%C3%A7a-em-apis-restful-a780bd9f186a"><i><span style="text-decoration: none;">E aí vamos aprender mais sobre APIs Restful?</span></i><span style="color: blue; font-family: "arial" , sans-serif;">thiagolima.blog.b</span></a><o:p></o:p></span></span></li>
</ul>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
</div>
</div>
</section>Vanessa Redeshttp://www.blogger.com/profile/14450182450295423264noreply@blogger.com7tag:blogger.com,1999:blog-264869294855361788.post-49141789607084610392020-05-01T11:27:00.001-07:002020-05-01T11:27:46.426-07:00Season Mobile com Appium - Ep.03: Robotizando o app do YouTube com o Appium<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNRq0S9qk4KZNtzEaL1GmUnoOEBwsEmEYGjCtpE5ZDJtpCSAScMEhUKEAgPDCvNBr-0Y5tyiNJpTgZKH02-mr4a3Q-7dKYT4CuPM-lUVfB5d8PS5Nnc_R0ckBQyx0RQuod8THB-cI2VDta/s1600/if_Robot_10_385840.png" imageanchor="1" style="font-family: "Times New Roman"; margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNRq0S9qk4KZNtzEaL1GmUnoOEBwsEmEYGjCtpE5ZDJtpCSAScMEhUKEAgPDCvNBr-0Y5tyiNJpTgZKH02-mr4a3Q-7dKYT4CuPM-lUVfB5d8PS5Nnc_R0ckBQyx0RQuod8THB-cI2VDta/s1600/if_Robot_10_385840.png" /></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif; margin-left: 1em; margin-right: 1em; text-align: center;"></span></span><br />
<div style="text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Olá pessoal, tudo beleza? Aqui é o <b><span style="color: #45818e;">Murillo Welsi</span></b> novamente! E s</span><span style="font-family: "trebuchet ms" , sans-serif;">eguindo a sequência do artigo anterior, vou mostrar como podemos criar um projeto de automação mobile usando o </span><b style="font-family: "trebuchet ms", sans-serif;"><span style="color: #45818e;">RobotFramework + </span></b><b style="font-family: "trebuchet ms", sans-serif;"><span style="color: #45818e;">Appium + Android Studio</span></b><span style="font-family: "trebuchet ms" , sans-serif;">. Bora por a mão na massa agora...</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #ffd966;"><i>A ideia deste artigo é manter a estrutura do projeto a mais simples possível, para que, a partir dele, possamos criar projetos mais escaláveis e seguindo os</i></span> <b><i><span style="color: #45818e;">Design Patterns</span></i></b><span style="color: #ffd966;">.</span></span><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><br />
<h2>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: x-large;"></span></h2>
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: x-large;">01 - Configurações</span></h2>
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: large;">Estrutura do projeto</span></h2>
<span style="font-family: "trebuchet ms" , sans-serif;">Antes de "codar" nossos testes, vamos montar uma estrutura bem simples do nosso projeto. Criaremos um diretório chamado <span style="color: #45818e;"><b>mobile-tests</b></span>. Dentro deste diretório, vamos criar dois arquivos:</span><br />
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;">tests.robot</span></span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;">variables.robot</span></span></li>
</ul>
<span style="color: #93c47d; font-family: "trebuchet ms" , sans-serif;"><i><b>Se, assim como eu, você é preguiçoso, execute o comando abaixo para criar a estrutura de uma só vez:</b></i></span><br />
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="font-family: "trebuchet ms" , sans-serif;">
</span>
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">mkdir mobile-tests && </span><span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">cd mobile-tests && </span><span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">touch tests.robot variables.robot</span><br />
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="480" src="https://giphy.com/embed/4KkSbPnZ5Skec" width="471"></iframe></div>
<a href="https://giphy.com/gifs/exercise-loop-the-simpsons-4KkSbPnZ5Skec"></a><br />
<span style="font-family: "trebuchet ms" , sans-serif;">Os comandos acima podem ser executados em sistemas <span style="color: #45818e;"><b>Linux</b></span>. Em sistemas <span style="color: #45818e;"><b>Windows</b></span> é necessário ter instalado um <i><span style="color: #45818e;"><b>Console Emulator</b></span></i>, como o <b><span style="color: #45818e;">Cmder</span></b>. Para instalar o <b><span style="color: #45818e;">Cmder</span></b>, acesse <a href="https://cmder.net/">https://cmder.net/</a>.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: x-large;">02 - Importando a AppiumLibrary</span></h2>
<span style="font-family: "trebuchet ms" , sans-serif;">Vamos inserir agora as configurações no bloco <b><span style="color: #45818e;">*** Settings ***</span></b> . Neste bloco faremos a importação da <b><span style="color: #45818e;">AppiumLibrary</span></b>, que nos permitirá fazer uso de várias <b><i><span style="color: #45818e;">Keywords </span></i></b></span><span style="font-family: "trebuchet ms" , sans-serif;">de interação com o Appium. </span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Consulte a documentação da <a href="https://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html">AppiumLibrary </a>em: </span><span style="font-family: "trebuchet ms" , sans-serif;"><a href="https://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html">https://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html</a></span>
<br />
<br />
<div>
<script src="https://gist.github.com/murillowelsi/17f5ce5ce9649458f12fdb92c10cf2e6.js"></script>
<span style="font-family: "trebuchet ms" , sans-serif;"><i>Note que fizemos também a importação do arquivo <b><span style="color: #45818e;">variables.robot</span></b>, que guardará nossas variáveis.</i></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><i><br /></i></span>
<span style="font-family: "trebuchet ms" , sans-serif;"></span><br />
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: x-large;">03 - Criando a primeira Keyword</span></h2>
</div>
<span style="font-family: "trebuchet ms" , sans-serif;">A seguir, faremos um passo muito importante, que será a criação da <b><i><span style="color: #45818e;">Keyword</span></i></b> que executará o app no nosso <span style="color: #45818e; font-style: italic; font-weight: bold;">Android Virtual Device (AVD)</span>. Daremos o nome </span><i style="font-family: "trebuchet ms", sans-serif; font-weight: bold;"><span style="color: #ffd966;">Open Youtube</span></i><span style="font-family: "trebuchet ms" , sans-serif;"> , e nela implementaremos a</span><span style="font-family: "trebuchet ms" , sans-serif;"> </span><span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #45818e; font-style: italic; font-weight: bold;">Keyword</span><i style="font-weight: bold;"> </i><span style="color: #ffd966; font-style: italic; font-weight: bold;">Open Application</span> (disponibilizada pela AppiumLibrary).</span><br />
<br />
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">A <span style="color: #45818e; font-style: italic; font-weight: bold;">Keyword</span><i style="font-weight: bold;"> </i><span style="color: #ffd966; font-style: italic; font-weight: bold;">Open Application</span> recebe os parâmetros das <i style="color: #45818e; font-weight: bold;">Capabilities </i>(mensionada no post anterior) e serão guardas em variáveis:</span><br />
<br />
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: medium;"><b><i><span style="color: #45818e;">platformName</span></i></b>: Qual plataforma mobile será utilizada (Ex: iOS, Android).</span></span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: medium;"><b><span style="color: #45818e;"><i>platformVersion</i></span></b>: Versão do S.O mobile (Ex: 10.0, 7.1, 4.4).</span></span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: medium;"><b><i><span style="color: #45818e;">deviceName</span></i></b>: O nome do device ou emulator que será utilizado (Pixel 2 API R).</span></span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: medium;"><b><i><span style="color: #45818e;">appPackage</span></i></b>: O pacote Java do app Android que você deseja executar (com.example.android.myApp, com.android.settings)</span></span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><b style="font-size: large;"><i><span style="color: #45818e;">appActivity</span></i></b><span style="font-size: medium;">: Nome da Activity que deseja executar do seu pacote. Isso geralmente deve ser precedido por "." (por exemplo, .MainActivity em vez de MainActivity). </span></span></li>
</ul>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"></span>
<br />
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">Arquivo de Variáveis</span></h2>
</div>
<span style="font-family: "trebuchet ms" , sans-serif;">Para facilitar a manutenção do nosso código, vamos inserir os valores das <b><i><span style="color: #45818e;">Capabilities</span></i></b> em variáveis. Para isso, iremos adicioná-las ao arquivo <b><span style="color: #45818e;">variables.robot</span></b>:</span><br />
<br />
<div>
<script src="https://gist.github.com/murillowelsi/73bd23b663cbe77612a687398d542b84.js"></script>
<span style="font-family: "trebuchet ms" , sans-serif;"><i>A variável <b><span style="color: #ffd966;">${REMOTE_URL}</span></b> é responsável por indicar o ip do Appium Server</i><i>. Certifique-se de preencher os dados corretamente, de acordo com as informações do seu ambiente.</i></span><br />
<br /></div>
<div>
<span style="font-size: x-large;"><span style="font-family: "trebuchet ms" , sans-serif;"></span>
</span>
<br />
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: x-large;">04 - Criando a primeiro Test Case</span></h2>
</div>
<span style="font-family: "trebuchet ms" , sans-serif;">Agora vamos implementar o primeiro <b><i><span style="color: #45818e;">Test Case</span></i></b>. Vamos dar o nome <b><i><span style="color: #ffd966;">Open App</span></i></b> para este caso de teste, e dentro dele implementaremos a <i style="font-weight: bold;"><span style="color: #45818e;">Keyword</span> <span style="color: #ffd966;">Open Youtube</span></i>, criada no passo anterior:</span><br />
<br />
<div>
<script src="https://gist.github.com/murillowelsi/67614f967b9ddb97ef8d9a541a0010bc.js"></script>
<span style="font-family: "trebuchet ms" , sans-serif;"><i>(:</i></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><i><br /></i></span>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: large;">Vamos executar então nosso primeiro teste?</span><br />
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: large;"><br /></span>
<br />
<div>
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: x-large;">05 - Executando o Test Case</span></h2>
</div>
<span style="font-family: "trebuchet ms" , sans-serif;">Antes de executar o teste, vamos criar o diretório <b><span style="color: #45818e;">logs</span></b>:</span><br />
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">mkdir logs</span><br />
<br />
<span style="font-family: "trebuchet ms" , sans-serif;">Agora sim podemos executar o teste, executando o comando abaixo:</span><br />
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;">robot -d logs/ .</span></span><br />
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;"><br /></span></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><i>O parâmetro <b>-d</b> indica o diretório onde os arquivos de logs e screenshots serão armazenados.</i></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><i><br /></i></span>
<span style="color: #ffd966; font-family: "trebuchet ms" , sans-serif;"><i><b>Obs.:</b> Não se esqueça de executar o <b>Appium</b> e o <b>AVD</b> no <b>Android Studio</b>!</i></span><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHPx7d7NYAgLyO7XlUZ7sNqIS6jGag2o85JyIMdXeu-6prxlXDKlCp5h_tBvdqSKVPNTaHhfHvbeYzdPu_CNle701WZfo9hiUupdpWITR84zq_oYRqkamkoXGE0Myo2vZN5B-Lvc8gf-E/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHPx7d7NYAgLyO7XlUZ7sNqIS6jGag2o85JyIMdXeu-6prxlXDKlCp5h_tBvdqSKVPNTaHhfHvbeYzdPu_CNle701WZfo9hiUupdpWITR84zq_oYRqkamkoXGE0Myo2vZN5B-Lvc8gf-E/s1600/1.png" /></a></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: large;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Pronto! Nossa automação está funcionando e abrindo o app mobile do YouTube no nosso <i><span style="color: #45818e;">Virtual Device</span>.</i></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><i><br /></i></span>
<span style="font-family: "trebuchet ms" , sans-serif;"></span><br />
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: x-large;">06 - Avançando nos Testes</span></h2>
</div>
<div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"></span><br />
<div style="color: black; font-family: "Times New Roman"; font-size: medium;">
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">Localizando Elementos</span></span></h2>
</div>
<span style="font-family: "trebuchet ms" , sans-serif;">Para localizar elementos no Appium devemos primeiramente iniciar o Appium:</span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh11sTTHF8v31VnTL6tCK3NvoXAAQuojVF_HrP2hxbs5ZGUh1MTIdEhu3DaTkJtEMuszl5r6Hni3-XQOnTUWVQioi3FLG-ZNxwH1UclpXWLHNAR9nQEcrQ0LulEbPgChVTL5YMg5y08MMo/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="653" data-original-width="643" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh11sTTHF8v31VnTL6tCK3NvoXAAQuojVF_HrP2hxbs5ZGUh1MTIdEhu3DaTkJtEMuszl5r6Hni3-XQOnTUWVQioi3FLG-ZNxwH1UclpXWLHNAR9nQEcrQ0LulEbPgChVTL5YMg5y08MMo/s1600/2.png" /></a></div>
<div>
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; font-size: xx-large;">
</div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; text-align: left;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><span style="color: black;"><br /></span></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span><span style="font-family: "trebuchet ms" , sans-serif;">Selecione o botão da <b><span style="color: #45818e;">Lupa</span></b>:</span><span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span><br />
<div style="color: #45818e; font-family: "trebuchet ms", sans-serif;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; font-size: xx-large; text-align: center;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAJ5uw53NAfuCUyEvhXowZW0K6bbaoxMHcjBbzOwiHxuU-Q-uessvrij4PDvUBdzym7dBeIPWuk4H3KT_xJ0S8RFCt01EDoPSppDk34lKtyhgukW70DNRPeotop9THiFoBOpOCtTCyahU/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="646" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAJ5uw53NAfuCUyEvhXowZW0K6bbaoxMHcjBbzOwiHxuU-Q-uessvrij4PDvUBdzym7dBeIPWuk4H3KT_xJ0S8RFCt01EDoPSppDk34lKtyhgukW70DNRPeotop9THiFoBOpOCtTCyahU/s1600/3.png" /></a></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<div>
<br /></div>
<span style="font-family: "trebuchet ms" , sans-serif;">Selecione o JSON de <b><i><span style="color: #45818e;">Capabilities</span></i></b> ou crie um novo, conforme a imagem:</span><span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span><br />
<div style="color: #45818e; font-family: "trebuchet ms", sans-serif;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; font-size: xx-large; text-align: center;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOE_i-db7apc66oin2YX5uUCsDn1b4JxXLRMQeQVj4895x74Fzjm4hHA0JA6VK-YkXghC9H1d9Mmvo7hWs1tT4NPbHpi8FV5dm8QIMo3Egls9IRggcpwpcqGCgUkz7StOrazQe8mPwQJE/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="876" data-original-width="1593" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOE_i-db7apc66oin2YX5uUCsDn1b4JxXLRMQeQVj4895x74Fzjm4hHA0JA6VK-YkXghC9H1d9Mmvo7hWs1tT4NPbHpi8FV5dm8QIMo3Egls9IRggcpwpcqGCgUkz7StOrazQe8mPwQJE/s1600/4.png" /></a></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div>
<br /></div>
<span style="font-family: "trebuchet ms" , sans-serif;">Selecione o botão <b><span style="color: #45818e;">Atualizar</span></b>, para que a tela seja atualizada de acordo com a tela do emulador:</span><span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span><br />
<div style="color: #45818e; font-family: "trebuchet ms", sans-serif;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; font-size: xx-large; text-align: center;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ZMzeEjbMfXaDhUT5ckt2rp32nfeJUuU3e7h6rLnNY70hCDftAq31dGl1JCnx2kbszBW5FQQyVhDMwfWuMK3Byj_OaJcBtD_GFoMbcU3FRd956lxOL5FNHX_7foLdI1Sf2j-wJo03VLo/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="884" data-original-width="1592" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ZMzeEjbMfXaDhUT5ckt2rp32nfeJUuU3e7h6rLnNY70hCDftAq31dGl1JCnx2kbszBW5FQQyVhDMwfWuMK3Byj_OaJcBtD_GFoMbcU3FRd956lxOL5FNHX_7foLdI1Sf2j-wJo03VLo/s1600/5.png" /></a></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; font-size: xx-large; text-align: center;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; font-size: xx-large; text-align: center;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiqJSopC9c5ZUboVyd5tFMxgusyXwJRLevL0Gn2Okt58AqYeW2__d8imJ6RjoIBKzs7nPeqS8vKmJX9U0PX3JY5p0b2YeTNcuBJAxTuTjZnAGFK_fTmKg0STqGrzXAeghHDIB1lGmlQbE/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="883" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiqJSopC9c5ZUboVyd5tFMxgusyXwJRLevL0Gn2Okt58AqYeW2__d8imJ6RjoIBKzs7nPeqS8vKmJX9U0PX3JY5p0b2YeTNcuBJAxTuTjZnAGFK_fTmKg0STqGrzXAeghHDIB1lGmlQbE/s1600/6.png" /></a></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span><br />
<div>
<br /></div>
<span style="font-family: "trebuchet ms" , sans-serif;">Clique no elemento que deseja localizar. Verifique que do lado direito da tela, as informações serão exibidas.<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span></span><br />
<div class="separator" style="clear: both; color: #45818e;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><span style="color: black;"><br /></span></span></span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>Faremos uma busca pelo <b><span style="color: #45818e;">accessibility id</span></b>:</span><span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span><br />
<div style="color: #45818e; font-family: "trebuchet ms", sans-serif;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; text-align: center;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOUehyphenhyphen4LanBRJr7FqSnY-3E8TWvglFUBQUapmuF_l8MY4MbgDnikGGT_798XiQWx5bp_ghX-pLTMAozFF4Rj6lniXuNvUP0B7QKyO85BRQo2FZxxW3MXpON8CgYV6yB_M3DoXfSSCZNno/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="773" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOUehyphenhyphen4LanBRJr7FqSnY-3E8TWvglFUBQUapmuF_l8MY4MbgDnikGGT_798XiQWx5bp_ghX-pLTMAozFF4Rj6lniXuNvUP0B7QKyO85BRQo2FZxxW3MXpON8CgYV6yB_M3DoXfSSCZNno/s1600/11.png" /></a></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<div>
<br /></div>
<span style="font-family: "trebuchet ms" , sans-serif;">Clique na <b><span style="color: #45818e;">Lupa</span></b>:</span><span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span><br />
<div style="color: #45818e; font-family: "trebuchet ms", sans-serif;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; font-size: xx-large; text-align: center;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiRbxotVQBwCt9WBLhJ35RRGVV6oXeVfXCVEHpUCIqrDey8XLbs1QIKv3_OhH4OmU0K7bmOKA2aC9NiloyX2R3QKhm73FmL_GnGNIx5l34HdhBrxtBaF4VhP_b5o9Fw9pgUaoqT_SVMUs/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="111" data-original-width="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiRbxotVQBwCt9WBLhJ35RRGVV6oXeVfXCVEHpUCIqrDey8XLbs1QIKv3_OhH4OmU0K7bmOKA2aC9NiloyX2R3QKhm73FmL_GnGNIx5l34HdhBrxtBaF4VhP_b5o9Fw9pgUaoqT_SVMUs/s1600/8.png" /></a></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div>
<br /></div>
<span style="font-family: "trebuchet ms" , sans-serif;">Note que um id foi localizado. Clique em <b><span style="color: #45818e;">Done</span></b>:</span><span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span><br />
<div style="color: #45818e; font-family: "trebuchet ms", sans-serif;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div class="separator" style="clear: both; font-family: "trebuchet ms", sans-serif; text-align: center;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_2zwluZ6m711SKipuxokJPXQ7WKQEBK26vbwlLe3_DOUi429TAN7kjaLFPQAa_v7QMqhkv9jEVGAJJtm4yx6TwJeGPA3UfipNvJDJfw1iMxPkz-UY4kY2RlI3n18GhN84Q541PhG5Huw/s1600/13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="602" data-original-width="1076" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_2zwluZ6m711SKipuxokJPXQ7WKQEBK26vbwlLe3_DOUi429TAN7kjaLFPQAa_v7QMqhkv9jEVGAJJtm4yx6TwJeGPA3UfipNvJDJfw1iMxPkz-UY4kY2RlI3n18GhN84Q541PhG5Huw/s1600/13.png" /></a></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<br />
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; text-align: center;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span>
<div class="separator" style="clear: both; font-family: "trebuchet ms", sans-serif;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><span style="color: black;"><span style="font-family: "trebuchet ms" , sans-serif;"><br class="Apple-interchange-newline" /></span></span></span></div>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">
</span><span style="font-family: "trebuchet ms" , sans-serif;">Podemos fazer a busca pelo <b><span style="color: #45818e;">xpath</span></b> também, mas <b><span style="color: #45818e;">muita cautela</span></b> ao usar kkkk:</span><span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;"><br />
<br />
<div class="separator" style="clear: both; font-family: "trebuchet ms", sans-serif;">
<br /></div>
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; font-size: xx-large; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8F2N37F8maMw7g61eQuhsXNiMUof8UbTopwU3vaBj2LudqlZSDImJPFAhRwMT3nlqJ8xj251OtDQLQArFJikYvocNzPlkjHvPYZsIPjWbE0mRS_Yddu1a-CfEjeREJAgDMGVkPSet6TE/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="451" data-original-width="539" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8F2N37F8maMw7g61eQuhsXNiMUof8UbTopwU3vaBj2LudqlZSDImJPFAhRwMT3nlqJ8xj251OtDQLQArFJikYvocNzPlkjHvPYZsIPjWbE0mRS_Yddu1a-CfEjeREJAgDMGVkPSet6TE/s1600/9.png" /></a></div>
<div style="color: #45818e; font-family: "trebuchet ms", sans-serif; font-size: xx-large;">
<br /></div>
<div class="separator" style="clear: both; color: #45818e; font-family: "trebuchet ms", sans-serif; font-size: xx-large; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjppUL7-GOJ1zairujV7tk8eRNSMv9xys8J-tGdIohOLtdB7snUhvxjeG_IkgxbB8vxRLcH5w3w_vhWwFfUvPUNDmzH6zb02sL3y99xJfgQ3-E_Njudd_xBmuau6OzNlhREL40YyuDYt_k/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="829" data-original-width="1351" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjppUL7-GOJ1zairujV7tk8eRNSMv9xys8J-tGdIohOLtdB7snUhvxjeG_IkgxbB8vxRLcH5w3w_vhWwFfUvPUNDmzH6zb02sL3y99xJfgQ3-E_Njudd_xBmuau6OzNlhREL40YyuDYt_k/s1600/10.png" /></a></div>
<div style="color: black; font-family: "times new roman"; font-size: medium;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div style="color: black; font-family: "times new roman"; font-size: medium;">
</div>
</span><span style="font-family: "trebuchet ms" , sans-serif;">A <b><span style="color: #45818e;">AppiumLibrary</span></b> aceita os seguintes localizadores:</span></div>
<div>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #45818e;">identifier</span>: </b>C</span><span style="font-family: "trebuchet ms" , sans-serif;">lick Element | identifier=my_element</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #45818e;">id</span>: </b></span><span style="font-family: "trebuchet ms" , sans-serif;">Click Element | id=my_element</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #45818e;">accessibility_id</span>: </b></span><span style="font-family: "trebuchet ms" , sans-serif;">Click Element | accessibility_id=button3</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #45818e;">xpath</span>: </b></span><span style="font-family: "trebuchet ms" , sans-serif;">Click Element | xpath=//UIATableView/UIATableCell/UIAButton</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #45818e;">class</span>: </b></span><span style="font-family: "trebuchet ms" , sans-serif;">Click Element | class=UIAPickerWheel</span></li>
</ul>
</div>
<div>
<h2>
<br /><span style="color: #45818e; font-family: "trebuchet ms" , sans-serif;">Adicionando ações aos testes</span></h2>
</div>
<span style="font-family: "trebuchet ms" , sans-serif;">Para finalizarmos, vamos adicionar mais elementos mapeados no arquivo <b><span style="color: #45818e;">variables.robot</span></b>:</span><br />
<div>
<br /></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">E adicionaremos também keywords para abrir o app do YouTube, fazer a busca entre outras ações simples, usando funções como <b><span style="color: #45818e;">Click Element</span> </b>e <b><span style="color: #45818e;">Input Text</span></b> da</span><span style="font-family: "trebuchet ms" , sans-serif;"> </span><span style="font-family: "trebuchet ms" , sans-serif;">biblioteca do Appium</span><span style="font-family: "trebuchet ms" , sans-serif;">:</span><br />
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="font-family: "trebuchet ms" , sans-serif;">Vamos rodar novamente os testes, executando o comando:</span><br />
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;"><br /></span><span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;">robot -d logs/ .</span></span><br />
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHcsylZXLHn4U-pWueWUz9-x9TekaQ-D2BVN71jMSf-RvaHz3_BPb8FtY4cJKTYsnNg_4oqU9ezQjriwFhpGnVGC1WD1TGwArtKRnjHZhIjNFXHOPft-0wqRGouEjsoWHZiJBIqff7Egk/s1600/14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="897" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHcsylZXLHn4U-pWueWUz9-x9TekaQ-D2BVN71jMSf-RvaHz3_BPb8FtY4cJKTYsnNg_4oqU9ezQjriwFhpGnVGC1WD1TGwArtKRnjHZhIjNFXHOPft-0wqRGouEjsoWHZiJBIqff7Egk/s1600/14.png" /></a></div>
<br />
<span style="font-family: "trebuchet ms" , sans-serif;">Se conferirmos os logs, podemos ver os resultados dos testes:</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9M5Zl90fN02MN906YL9nUfxdj6UeYqKxTL3PeI26zyHXGfUUTKTRbVTsSmIgvNqgjPyDCZ14xLO-PUCLfSGgLYcCY1h09cCwitQjC29QX3AFfHrUGERfGl3uUiQBsF_LyX0zgCC2zQDA/s1600/15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="909" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9M5Zl90fN02MN906YL9nUfxdj6UeYqKxTL3PeI26zyHXGfUUTKTRbVTsSmIgvNqgjPyDCZ14xLO-PUCLfSGgLYcCY1h09cCwitQjC29QX3AFfHrUGERfGl3uUiQBsF_LyX0zgCC2zQDA/s1600/15.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">Vamos finalizando aqui mais um artigo. Acho que conseguimos fazer, ainda que de maneira muito simples, alguns testes usando o <b><span style="color: #45818e;">RobotFramework</span></b> + <b><span style="color: #45818e;">Appium</span></b> + <span style="color: #45818e;"><b>Android</b> <b>Studio</b></span>. </span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">Espero ter ajudado o pessoal que não conhecia, ou conhecia muito pouco o mundo da automação mobile.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: large;"><b>Um grande abraço, e até a próxima!!!</b></span></div>
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="322" src="https://giphy.com/embed/azUBCBFSCyNgc" width="480"></iframe></div>
<a href="https://giphy.com/gifs/lazy-azUBCBFSCyNgc"></a>Murillo Welsihttp://www.blogger.com/profile/02138160736120164722noreply@blogger.com2tag:blogger.com,1999:blog-264869294855361788.post-19179411376503886032020-05-01T11:27:00.000-07:002020-05-01T11:27:40.901-07:00Season Mobile com Appium - Ep.02: Instalação e Setup Appium + Android Studio no Ubuntu 20.04<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNRq0S9qk4KZNtzEaL1GmUnoOEBwsEmEYGjCtpE5ZDJtpCSAScMEhUKEAgPDCvNBr-0Y5tyiNJpTgZKH02-mr4a3Q-7dKYT4CuPM-lUVfB5d8PS5Nnc_R0ckBQyx0RQuod8THB-cI2VDta/s1600/if_Robot_10_385840.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNRq0S9qk4KZNtzEaL1GmUnoOEBwsEmEYGjCtpE5ZDJtpCSAScMEhUKEAgPDCvNBr-0Y5tyiNJpTgZKH02-mr4a3Q-7dKYT4CuPM-lUVfB5d8PS5Nnc_R0ckBQyx0RQuod8THB-cI2VDta/s1600/if_Robot_10_385840.png" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<br />
<span style="font-family: "trebuchet ms" , sans-serif;">Fala pessoal, tudo beleza? Aqui é o <b>Murillo Welsi</b> e nesse artigo vou mostrar como fazer a instalação e <i>setup </i>do ambiente de testes usando o <b><span style="color: #45818e;">Appium + Android Studio</span></b> no <b>Ubuntu 20.04</b>. Bora ver...</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: x-large;"></span></h2>
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: x-large;">01 - Instalando os pré-requisitos</span></h2>
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: large;">Java</span></h2>
<span style="font-family: "trebuchet ms" , sans-serif;">Antes de iniciarmos a instalação do <span style="color: #45818e;"><b><i>Android Studio</i></b></span>, devemos ter o <span style="color: #45818e;"><b>Java</b> </span>instalado, para isto, execute:</span><br />
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">sudo apt install openjdk-8-jdk</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Edite o arquivo <span style="color: #45818e;"><b>bashrc</b> </span>usando o <span style="color: #45818e;"><b>nano</b> </span>ou outro editor de textos:</span><br />
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;">sudo nano ~/.bashrc</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Adicione a linha abaixo no <span style="color: #45818e;"><b>final</b> </span>do arquivo e depois digite <b><span style="color: #45818e;">Ctrl + X</span></b> para salvar:</span><br />
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;">export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: #f3f3f3;"><br /></span>
Recarregue o arquivo <b><span style="color: #45818e;">.bashrc</span></b> com o comando <b><span style="color: #45818e;">source</span></b>:</span><br />
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;">source ~/.bashrc</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Faça um teste executando:</span><br />
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "courier new" , "courier" , monospace;">echo $</span><span style="font-family: "courier new" , "courier" , monospace;">JAVA_HOME</span></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: #f3f3f3;"><span style="font-family: "courier new" , "courier" , monospace;"><br /></span></span>
O retorno deve ser:</span><br />
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;">/usr/lib/jvm/java-8-openjdk-amd64</span></span><br />
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: large;"><br /></span></h2>
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: large;">ADB Tools</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Vamos instalar também o <b><span style="color: #45818e;">ADB Tools</span></b>: </span></div>
<h2>
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif; font-size: small; font-weight: normal;">sudo apt install android-tools-adb</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Para verificar se foi instalado corretamente execute:</span></div>
<div>
<h2>
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif; font-size: small; font-weight: normal;">adb version</span></h2>
</div>
<div>
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif; font-size: small; font-weight: normal;"><br /></span></div>
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: x-large;">02 - Android Studio</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Existem diversas maneiras de se instalar o <i><b><span style="color: #45818e;">Android Studio</span></b></i>. Neste passo a passo, faremos a instalação via <i>Snap</i>, um gerenciador de pacotes muito fácil de usar no <b>Ubuntu</b>.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Primeiramente, instale o </span><i style="font-family: "Trebuchet MS", sans-serif;">Snap</i><span style="font-family: "trebuchet ms" , sans-serif;">, caso não possua:</span><br />
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">sudo apt install snapd</span></div>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Depois instale o <i><b><span style="color: #45818e;">Android Studio</span></b></i> com um simples comando:</span><br />
<span style="background-color: black; font-family: "trebuchet ms" , sans-serif;"><span style="color: white; font-family: "courier new" , "courier" , monospace;">sudo </span><span style="color: white; font-family: "courier new" , "courier" , monospace;">snap install android-studio --classic</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: black;"><span style="color: white; font-family: "courier new" , "courier" , monospace;"><br /></span></span>
Busque e execute o <span style="color: #45818e;"><b><i>Android Studio</i></b></span> nos seus aplicativos:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiww5wbGTudLeoEjqTdWTZCNbjmA3onGsHMYKIDrvIepmLpSo1kMXXj9WilQflkLiBiebRwSN3Mzp8gcsYJfscsPo00hCY5dbyWBW_xx2XjTI9MsUXqC4ICnnGG8jLOprZw0RQm-EV4Sks/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="602" data-original-width="1515" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiww5wbGTudLeoEjqTdWTZCNbjmA3onGsHMYKIDrvIepmLpSo1kMXXj9WilQflkLiBiebRwSN3Mzp8gcsYJfscsPo00hCY5dbyWBW_xx2XjTI9MsUXqC4ICnnGG8jLOprZw0RQm-EV4Sks/s1600/1.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Finalize a instalação seguindo os passos abaixo:</span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6vOpr7lNRXrwUm1ufhgWcJx68wxAdbGfXA5AwVSalKDcZ-KTVrVeC3PLJHvLZ9NcfW_xFhyphenhyphenZA8vK9DIhu8EQ2gdX0vu80HAezHb475UM5fPplK31XxbEoFmJBYXY13_C-tDkRj5FewCw/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="186" data-original-width="550" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6vOpr7lNRXrwUm1ufhgWcJx68wxAdbGfXA5AwVSalKDcZ-KTVrVeC3PLJHvLZ9NcfW_xFhyphenhyphenZA8vK9DIhu8EQ2gdX0vu80HAezHb475UM5fPplK31XxbEoFmJBYXY13_C-tDkRj5FewCw/s1600/2.png" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMOmY-uQp41WmXBfQDt3WX2MSdrzXDJObhYNO3yqApUQnzngQt9nk9uoQny4Z8TpQUFFK_xiSspAkm2F7MgzqptnxzjuvPf78cZdWrCOi1-v7jUBHISfr5EWvaLwSOJYYEnMZ22uYRe0c/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="557" data-original-width="752" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMOmY-uQp41WmXBfQDt3WX2MSdrzXDJObhYNO3yqApUQnzngQt9nk9uoQny4Z8TpQUFFK_xiSspAkm2F7MgzqptnxzjuvPf78cZdWrCOi1-v7jUBHISfr5EWvaLwSOJYYEnMZ22uYRe0c/s1600/3.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayGToCBLp67mcefsKuOgrWnTJocNNJmKyw5IhMaFS6CqSEoO_FmVem__g0s2gmbWWfTIHB8JfiK6lF2zy3NGvtyLswF2sYaDq7cpZaNoLwVw4T_P0lBBmnpCi-nBFMPUCNlOTAsJUTrY/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="556" data-original-width="748" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayGToCBLp67mcefsKuOgrWnTJocNNJmKyw5IhMaFS6CqSEoO_FmVem__g0s2gmbWWfTIHB8JfiK6lF2zy3NGvtyLswF2sYaDq7cpZaNoLwVw4T_P0lBBmnpCi-nBFMPUCNlOTAsJUTrY/s1600/4.png" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: large;">03 - Criando Android Virtual Device (AVD)</span></h2>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;"><span style="font-size: small;">Agora, vamos criar e configurar um <span style="color: #45818e;"><b>AVD</b> </span>Android Studio. Selecione <span style="color: #45818e;"><i><b>Configure > </b></i></span></span><b><span style="color: #45818e;"><i>AVD Manager</i></span></b><span style="font-size: small;">:</span></span></div>
<div>
<span style="font-size: large;"><span style="font-family: "trebuchet ms" , sans-serif; font-size: small;"><br /></span></span></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirwPiRriqltnGY_tF59bFVJwrVv0DWOchC9zYs6UyVIQYuOhHdRhesv9-jfRpXU37zgvL2qfJnMSlzh5pvCCK5y8m57CjuskJKtANEz2BpNqsgrhu8bZlpwSSa_mC9ryVOO0c8GZe6P3U/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="741" data-original-width="805" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirwPiRriqltnGY_tF59bFVJwrVv0DWOchC9zYs6UyVIQYuOhHdRhesv9-jfRpXU37zgvL2qfJnMSlzh5pvCCK5y8m57CjuskJKtANEz2BpNqsgrhu8bZlpwSSa_mC9ryVOO0c8GZe6P3U/s1600/5.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Selecione <b><i><span style="color: #45818e;">Create Virtual Device</span></i></b>:</span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtaazq459_hHRdWFsAGoEEwqTuQprOm8cAO7iamNg2OjA6mHy3K-NIeTlomBPAli2AYTJZrENF9PtyTFPwr01ExcP3xVwO3B8vnaERZB8vACEBKqj1O7RsDDwyZOxCQAN7-idOWSMYglw/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="450" data-original-width="1131" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtaazq459_hHRdWFsAGoEEwqTuQprOm8cAO7iamNg2OjA6mHy3K-NIeTlomBPAli2AYTJZrENF9PtyTFPwr01ExcP3xVwO3B8vnaERZB8vACEBKqj1O7RsDDwyZOxCQAN7-idOWSMYglw/s1600/6.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Escolha o modelo do <b><i><span style="color: #45818e;">device</span></i></b>. Neste tutorial utilizaremos o <b><span style="color: #45818e;">Google Pixel 2</span></b>:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi73S_B5v_xrwwuyVe2ZbPtJRVgUQYOVSr4f0PaN1o6eu_6dgz2L8zreR39MjGSqAyzrNJocDuMFjLF16vsp2a8kYEoWNpOx4GvwU4QuvxwrSEgdvd86pV-0uu1nuWems6H0ERWISt9JBo/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="681" data-original-width="990" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi73S_B5v_xrwwuyVe2ZbPtJRVgUQYOVSr4f0PaN1o6eu_6dgz2L8zreR39MjGSqAyzrNJocDuMFjLF16vsp2a8kYEoWNpOx4GvwU4QuvxwrSEgdvd86pV-0uu1nuWems6H0ERWISt9JBo/s1600/7.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Escolha também a versão desejada do <b><span style="color: #45818e;">Android </span></b>e clique no botão <b><span style="color: #45818e;">Next</span></b>:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBf0-y9YL8da2wn5JxLwisM3AVikXhuGSDhMx6mhLX8U6QFxjs46QVxXnAKg4K93l51L6hfYEOTjVPpoIVjQw4Uvo5qycqkz5HdKV__8AL8HyN_xfcuZasRp8u09xHJP2K7DHXdi5q-wk/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="676" data-original-width="995" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBf0-y9YL8da2wn5JxLwisM3AVikXhuGSDhMx6mhLX8U6QFxjs46QVxXnAKg4K93l51L6hfYEOTjVPpoIVjQw4Uvo5qycqkz5HdKV__8AL8HyN_xfcuZasRp8u09xHJP2K7DHXdi5q-wk/s1600/8.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Guarde o nome do <b><span style="color: #45818e;">AVD</span></b>, ele será importante para nosso projeto de automação. Clique no botão <b><i><span style="color: #45818e;">Finish</span></i></b>:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvOKJSERwrb6MaVq7nkMNXhddfBy5xr5bA6LIkuVg8i5Lh4rpEnVMcUOAEXoih4_vRwyPojFwhhbmgH3qD8bybU8ipUz9QWee0Y4Zd_vZJ6RqxlIK-5J9tTh4EOKHbMJCfb_XGnVPnlt8/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="681" data-original-width="992" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvOKJSERwrb6MaVq7nkMNXhddfBy5xr5bA6LIkuVg8i5Lh4rpEnVMcUOAEXoih4_vRwyPojFwhhbmgH3qD8bybU8ipUz9QWee0Y4Zd_vZJ6RqxlIK-5J9tTh4EOKHbMJCfb_XGnVPnlt8/s1600/9.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Pronto, nosso <b><i><span style="color: #45818e;">AVD </span></i></b>está criado. Para iniciá-lo clique no botão <b><i><span style="color: #45818e;">play</span></i></b>.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuKIX5v4VIfvsY1uT63mmE4FFMzRJX4EN7aD1DhRlYCbkLpEdR3nimLP1dge356oyaxat3_jHkGCYkqNdl31K6pBoqHHeJRFKOHWxbKck6WeOhf9P5nXLyOkRt1bxySyJvS4Ki29kA-78/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="453" data-original-width="1127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuKIX5v4VIfvsY1uT63mmE4FFMzRJX4EN7aD1DhRlYCbkLpEdR3nimLP1dge356oyaxat3_jHkGCYkqNdl31K6pBoqHHeJRFKOHWxbKck6WeOhf9P5nXLyOkRt1bxySyJvS4Ki29kA-78/s1600/10.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuKiHhRMB4xXnvBQ_ZdCdG22GvaBD4WL8UDiX1s1AJK5vUG_4XyZwJqPgsKgCr04swh-hPywiAUra1VPVDt8EyhPKqKIRfC-OqS3VTFIth7Dg2KlS0eN8bmuwAiKngUilMWeum6OVhd18/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="868" data-original-width="1264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuKiHhRMB4xXnvBQ_ZdCdG22GvaBD4WL8UDiX1s1AJK5vUG_4XyZwJqPgsKgCr04swh-hPywiAUra1VPVDt8EyhPKqKIRfC-OqS3VTFIth7Dg2KlS0eN8bmuwAiKngUilMWeum6OVhd18/s1600/11.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Para finalizar, edite <span style="color: #45818e;"><b>novamente</b> </span>o arquivo <b><span style="color: #45818e;">.bashrc</span></b>:</span><br />
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;">sudo nano ~/.bashrc</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Adicione as seguintes linhas no final do arquivo e depois digite "<span style="color: #45818e;"><b>Ctrl + X</b></span>" para salvar:</span><br />
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">export ANDROID_HOME=~/Android/Sdk/</span><br />
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">export ANDROID_TOOLS=~/Android/Sdk/tools/</span><br />
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">export ANDROID_BUILD_TOOLS=~/Android/Sdk/build-tools/29.0.3/</span><br />
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">export ANDROID_PLATFORM_TOOLS=~/Android/Sdk/platform-tools/</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: black;"><span style="color: white;"></span></span><br /></span>
<span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;">PATH=$PATH:$ANDROID_HOME:$ANDROID_TOOLS:$ANDROID_PLATFORM_TOOLS:$ANDROID_BUILD_TOOLS</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: black; color: white;"><br /></span>
O arquivo deverá ficar da seguinte maneira:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIopzbP_m6s7Q5y1BNO_y5-tx6XhFO_UbGHs-mQdls7a_FO17q7uNaFbHR1o2nYO0wZouFQtoUBt0Bbjxc4gWEQ44DqluVZgSe20Zdwmu8IWfWZzfR0aZzUSO9duDo2kKyKQ7I6_gcOkQ/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="155" data-original-width="829" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIopzbP_m6s7Q5y1BNO_y5-tx6XhFO_UbGHs-mQdls7a_FO17q7uNaFbHR1o2nYO0wZouFQtoUBt0Bbjxc4gWEQ44DqluVZgSe20Zdwmu8IWfWZzfR0aZzUSO9duDo2kKyKQ7I6_gcOkQ/s1600/12.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Recarregue o arquivo <b><span style="color: #45818e;">.bashrc</span></b> usando o comando "<b><span style="color: #45818e;">source</span></b>":</span><br />
<span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;">source ~/.bashrc</span></span></div>
<div>
<h2>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: x-large;"><br /></span></h2>
<h2>
<span style="color: #45818e; font-family: "trebuchet ms" , sans-serif; font-size: x-large;">04 - Appium</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: inherit;">Vamos fazer o download do <i><b><span style="color: #45818e;">Appium </span></b></i>(via <b><i><span style="color: #45818e;">AppImage</span></i></b>). Vamos criar um diretório chamado Programas para armazenar o <b><i><span style="color: #45818e;">AppImage </span></i></b>do </span><span style="color: #45818e; font-family: inherit;"><b><i>Appium</i></b></span><span style="font-family: inherit;">:</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;">
<span style="background-color: black; color: white;">mkdir /home/$USER/Programas</span><br />
<span style="font-family: inherit; font-size: large;"><br /></span>
<span style="font-family: inherit;">Agora execute o seguite comando para acessar o diretório que criamos e fazer o download do </span><span style="color: #45818e; font-family: inherit;"><b><i>Appium</i></b></span><span style="font-family: inherit;">:</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;">
<span style="color: white; font-family: "courier new" , "courier" , monospace;"><span style="background-color: black;">cd ~/Programas && wget https://github.com/appium/appium-desktop/releases/download/v1.15.1/Appium-linux-1.15</span>.</span><br />
<span style="background-color: black; color: white;">1.AppImage</span><br />
<br />Para abrir o <b><i><span style="color: #45818e;">Appium</span></i></b>, basta acessar o diretório <span style="color: #45818e;"><b>Programas</b> </span>e dar um duplo clique no <b><span style="color: #45818e;">Appium-linux-1.15.1.AppImage</span></b>:<br />
<br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdDspCkiK03kY1UejpbpdA-p8PpGaXtk5X7jRSsQ9pqWboDzi5lkBqAf3aVkdQjxWeqrjkyK561J5QDhJswUljIcUJDDwv_14hifH7BU5MdOJ4TVuNbjUsUK21qA2uo9kbdT0ocGNucZQ/s1600/13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="576" data-original-width="1274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdDspCkiK03kY1UejpbpdA-p8PpGaXtk5X7jRSsQ9pqWboDzi5lkBqAf3aVkdQjxWeqrjkyK561J5QDhJswUljIcUJDDwv_14hifH7BU5MdOJ4TVuNbjUsUK21qA2uo9kbdT0ocGNucZQ/s1600/13.png" /></a></span></div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;">
<br />
Vamos iniciar o <b><span style="color: #45818e;">Appium Server</span></b> clicando no botão <b><span style="color: #45818e;">Start Server</span></b>.<br />
<b><span style="color: #45818e;">Obs.:</span> </b>O campo <span style="color: #45818e;"><b>Host</b> </span>deve estar com o <span style="color: #45818e;"><b>IP 0.0.0.0</b></span>, e o campo <span style="color: #45818e;"><b>Port</b> </span>deve conter o valor <b><span style="color: #45818e;">4723</span></b>:<br />
<br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqwUK4g91p0IFtBRpDHZNfvyHSe0p6ffHfIZH6xlLDtBWeJbcLooIbxj4_OabX_ImTpPtVpQ5z1pWoTtGuQgU_uCg_6btmf9z6shXjaHuS7YW6xAYJKtEcTsJsr6AnSXbll4ZZ96svYr0/s1600/14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="652" data-original-width="651" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqwUK4g91p0IFtBRpDHZNfvyHSe0p6ffHfIZH6xlLDtBWeJbcLooIbxj4_OabX_ImTpPtVpQ5z1pWoTtGuQgU_uCg_6btmf9z6shXjaHuS7YW6xAYJKtEcTsJsr6AnSXbll4ZZ96svYr0/s1600/14.png" /></a></span></div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;">
<br /><span style="font-family: inherit;">
Com o <b><span style="color: #45818e;">Appium Server</span></b> iniciado, vamos fazer um teste para garantir que tudo está funcionando. Para isto, clique no ícone da <b><span style="color: #45818e;">Lupa</span></b>:</span><br />
<br />
</span><br />
<div class="separator" style="clear: both; font-size: x-large; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy2yCzUpu5m__E6_qegA99kfeq00Eh4xjg8S53VB60r-dGYUtoNmg2J-dZ5GsXBCi06N5L5eUJIhtq82PeOWQpKEe1liVFA1ZxSFx068F5i9aAG0VbhhENQYSqAzYy7JWWMekp-T9EojU/s1600/15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="614" data-original-width="648" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy2yCzUpu5m__E6_qegA99kfeq00Eh4xjg8S53VB60r-dGYUtoNmg2J-dZ5GsXBCi06N5L5eUJIhtq82PeOWQpKEe1liVFA1ZxSFx068F5i9aAG0VbhhENQYSqAzYy7JWWMekp-T9EojU/s1600/15.png" /></a></span></div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;">
<br />
Na janela seguinte, informaremos as nossas <b><span style="color: #45818e;">Desired Capabilities</span></b>. </span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;"><br /></span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;">As <span style="color: #45818e;"><b>Capabilities</b> </span>são <span style="color: #45818e;"><b>chaves</b> </span>e <span style="color: #45818e;"><b>valores</b> </span>codificados em um objeto <b><span style="color: #45818e;">JSON</span></b>, enviados pelos clientes do Appium para o servidor quando uma nova sessão de automação é solicitada. Clique no botão <b><span style="color: #45818e;">Editar</span></b>:<br />
<br />
</span><br />
<div class="separator" style="clear: both; font-size: x-large; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAKgQxqbakdrezOxBrMGSzUdsv03wg0h_A751IL8VJ4z_B7n_-_f8q_KxDq5zNMF0pi1MFjk4w4WtpiVXQ_YfhDP8VMHvBVbXt2noFSjMVbk3KRTc0GxrWhCnicBwQQd56e7c51-r5gXQ/s1600/16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="602" data-original-width="1076" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAKgQxqbakdrezOxBrMGSzUdsv03wg0h_A751IL8VJ4z_B7n_-_f8q_KxDq5zNMF0pi1MFjk4w4WtpiVXQ_YfhDP8VMHvBVbXt2noFSjMVbk3KRTc0GxrWhCnicBwQQd56e7c51-r5gXQ/s1600/16.png" /></a></span></div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;">
<br />
Para testarmos o <b><span style="color: #45818e;">Appium </span></b>executando o app do YouTube, vamos inserir o seguinte objeto JSON e depois salvar:<br />
<span style="color: #45818e;"><br />
<span style="color: #6aa84f; font-family: "courier new" , "courier" , monospace;"><b>{</b></span><br />
<span style="color: #6aa84f; font-family: "courier new" , "courier" , monospace;"><b> "platformName": "Android",</b></span><br />
<span style="color: #6aa84f; font-family: "courier new" , "courier" , monospace;"><b> "platformVersion": "10.0",</b></span><br />
<span style="color: #6aa84f; font-family: "courier new" , "courier" , monospace;"><b> "deviceName": "Pixel 2 API R",</b></span><br />
<span style="color: #6aa84f; font-family: "courier new" , "courier" , monospace;"><b> "appPackage": "com.google.android.youtube",</b></span><br />
<span style="color: #6aa84f; font-family: "courier new" , "courier" , monospace;"><b> "appActivity": "com.google.android.youtube.MainActivity"</b></span><br />
<span style="color: #6aa84f; font-family: "courier new" , "courier" , monospace;"><b>}</b></span></span><br />
<span style="color: #6aa84f; font-family: "courier new" , "courier" , monospace; font-size: large;"><b><br /></b></span>
<span style="font-family: inherit;">Sendo:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><b><i><span style="color: #45818e;">platformName</span></i></b>: Qual plataforma mobile será utilizada (Ex: iOS, Android).</span><br />
<span style="font-family: inherit;"><b><span style="color: #45818e;"><i>platformVersion</i></span></b>: Versão do S.O mobile (Ex: 10.0, 7.1, 4.4).</span><br />
<span style="font-family: inherit;"><b><i><span style="color: #45818e;">deviceName</span></i></b>: O nome do device ou emulator que será utilizado (Pixel 2 API R).</span><br />
<span style="font-family: inherit;"><b><i><span style="color: #45818e;">appPackage</span></i></b>: O pacote Java do app Android que você deseja executar (com.example.android.myApp, com.android.settings)</span><br />
<b><i><span style="color: #45818e;">appActivity</span></i></b><span style="font-family: inherit;">: Nome da Activity que deseja executar do seu pacote. Isso geralmente deve ser precedido por "." (por exemplo, .MainActivity em vez de MainActivity). </span><br />
<br />
</span><br />
<div class="separator" style="clear: both; font-size: x-large; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCMk9yaLvndr0BSCnmodQ2dkHjeIlPv8n5EFyaypacuNbDLmA0wCzTMCpsV4_qYVyeq-QADaCAruPv_rngbWB3rUwPiKKpn-GI5S3Qa_miSPYqkIJ4dUtwamGBaO32DnOOmafaEWaD3BU/s1600/17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="650" data-original-width="1116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCMk9yaLvndr0BSCnmodQ2dkHjeIlPv8n5EFyaypacuNbDLmA0wCzTMCpsV4_qYVyeq-QADaCAruPv_rngbWB3rUwPiKKpn-GI5S3Qa_miSPYqkIJ4dUtwamGBaO32DnOOmafaEWaD3BU/s1600/17.png" /></a></span></div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;">
<br />
Salve as configurações de <i>Capabilities </i>em <b><span style="color: #45818e;">Save As...</span> </b>, e depois clique em <b><span style="color: #45818e;">Start Session</span></b>:<br />
<br />
</span><br />
<div class="separator" style="clear: both; font-size: x-large; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUg6kwou2449WnfJ5PL4DRM6uIC8oxCChzY0WLBs80xYQ9fjbPCckDQDKIJmOn7-hjuF0tlMHAOZw5zBKBadeD0XKneUUXEi3ByahHMxAkejnOWj-3j4jsXdFyr7zXSW9XJdn1tYA2Z_0/s1600/18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="650" data-original-width="1115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUg6kwou2449WnfJ5PL4DRM6uIC8oxCChzY0WLBs80xYQ9fjbPCckDQDKIJmOn7-hjuF0tlMHAOZw5zBKBadeD0XKneUUXEi3ByahHMxAkejnOWj-3j4jsXdFyr7zXSW9XJdn1tYA2Z_0/s1600/18.png" /></a></span></div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;">
<br />
<b><span style="color: #cc0000;">Obs.: É importante que o nosso AVD esteja ligado neste momento, para que o app seja executado dentro dele.</span></b><br />
<br />
Note que o <span style="color: #45818e;"><b>Appium </b></span>executará o app do YouTube instalado em nosso <i><b><span style="color: #134f5c;">device</span></b></i>, o que possibilitará nossa automação de testes:<br />
<br />
</span><br />
<div class="separator" style="clear: both; font-size: x-large; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4pKckaOcJPVglIWOBGIdhpbTaWd04VkdmZ5GYqSja5NeiVhVqvg9zfNK0AeP2IalL2u_cwt-o90onkSKT8giG52V0jKxSSyY7zXkNuT1UgizAoG2v9s7aOc6Hbv5iOSVE6cEO3Vsr2Bc/s1600/19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="846" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4pKckaOcJPVglIWOBGIdhpbTaWd04VkdmZ5GYqSja5NeiVhVqvg9zfNK0AeP2IalL2u_cwt-o90onkSKT8giG52V0jKxSSyY7zXkNuT1UgizAoG2v9s7aOc6Hbv5iOSVE6cEO3Vsr2Bc/s1600/19.png" /></a></span></div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;">
<br />
<br />
<span style="font-family: inherit;">Bom, vamos finalizando este post por aqui! </span></span></div>
<div>
<span style="font-size: medium;"><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: medium;"><span style="font-family: inherit;">Terminamos então as configurações do nosso emulador no <span style="color: #45818e;"><b>Android Studio</b></span>, do <b><span style="color: #45818e;">Appium Server</span></b>, e de quebra fizemos um pequeno teste abrindo um app no <b><span style="color: #45818e;">AVD</span></b>.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">No próximo post mostrarei como podemos criar um projeto de automação usando a <span style="color: #45818e;"><b><a href="https://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html">AppiumLibrary</a> </b></span>do <span style="color: #45818e;"><b>Robot Framework</b></span>. </span><br />
<b style="font-size: x-large;"><br /></b>
<b style="font-size: x-large;"><span style="color: #45818e;">Espero ter ajudado vocês com este artigo, pessoal. </span></b></span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: large;"><b style="font-size: x-large;"><span style="color: #45818e;">Um grande abraço, à distância, é claro!</span></b><br />
<b style="font-size: x-large;"><br /></b>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="360" src="https://giphy.com/embed/8SmcUP2HIfjnW" width="480"></iframe><span style="font-size: large;"><a href="https://giphy.com/gifs/frasier-niles-crane-8SmcUP2HIfjnW"></a></span></span></div>
<span style="font-size: large;">
<br />
</span></div>
</div>
Murillo Welsihttp://www.blogger.com/profile/02138160736120164722noreply@blogger.com2tag:blogger.com,1999:blog-264869294855361788.post-78440306516866291692020-03-20T13:03:00.001-07:002020-03-21T06:34:36.907-07:00Season Libraries - Ep. 09: ScreenCapLibrary - 👀 BIGBROTHER com ROBOT<div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">
<div class="separator" style="clear: both; font-family: "Times New Roman"; font-size: medium; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" /></a></div>
<div style="font-family: "Times New Roman"; font-size: medium;">
<br /></div>
<div style="font-family: "times new roman", serif; font-size: 12pt;">
<span style="font-size: 12pt;"></span></div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;">Fala Robotizadores, como estamos hoje? Espero que estejam bem!<span style="font-family: "trebuchet ms" , sans-serif;"> Já pensou </span>o quão legal seria gravar o seu teste e depois usar isso como um manual do produto ou como evidência de um defeito com o Robot Framework??? Eu sou o robotizador <b>Bruno Longo</b> e eu vou mostrar para vocês como fazer isso, bora lá ...</span></div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<h2 style="text-align: justify;">
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">01 - A ScreenCapLibrary: gravando seus testes</span></h2>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;">A <a href="https://github.com/mihaiparvu/ScreenCapLibrary#introduction"><b><span style="color: #a64d79;">ScreenCapLibrary</span></b></a> é uma biblioteca </span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">para geração de evidências das execuções dos testes com o Robot, ela permite gravar <b>vídeos </b>da execução, gravar a execução como um <b>GIF</b> e até mesmo fazer um simples <i><b>printscreen </b></i>da tela.</span></div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">Diferente de outras bibliotecas que tiram apenas <b><i>prints </i></b>da tela do navegador, a </span><span style="font-family: "trebuchet ms" , sans-serif;"><a href="https://github.com/mihaiparvu/ScreenCapLibrary#introduction" style="color: #a64d79; font-family: "Trebuchet MS", sans-serif; font-weight: bold;">ScreenCapLibrary</a> </span><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;">grava todo o conteúdo da tela da sua máquina e com isso fica a ressalva de tomar cuidado com o que você deixa aberto na sua máquina ao executar esse processo, pois ele vai gravar tudo!</span></div>
</div>
<div class="MsoNormal" style="font-family: "Times New Roman", serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="font-family: "Times New Roman", serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<h2 style="font-family: "Times New Roman"; text-align: justify;">
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">02 - Instalação</span></h2>
</div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<i style="font-family: "trebuchet ms", sans-serif; font-size: 12pt;"><span style="background-color: black; color: #999999;"><span lang="EN-US">pip </span><span lang="EN-US" style="font-family: "calibri" , sans-serif;">install --upgrade robotframework-screencaplibrary</span></span></i><br />
<i style="font-family: "Trebuchet MS", sans-serif; font-size: 12pt;"><span lang="EN-US" style="font-family: "calibri" , sans-serif;"><br /></span></i>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"><span lang="EN-US"><b><span style="color: #a64d79;">#FICAADICA:</span> </b>Para alguns, dependendo da forma como o <b>Python 3</b> foi instalado, talvez seja <i><b>pip3 </b></i>ali no lugar de <b><i>pip</i></b>!</span></span></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<h2 style="text-align: justify;">
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">03 - Bora gravar!</span></h2>
<div style="text-align: justify;">
<span style="font-family: Trebuchet MS, sans-serif;">Uma vez instalada basta incluir a biblioteca no seu código Robot e começar a gravar.</span></div>
</div>
<br />
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<span style="color: #6aa84f; font-family: "courier new" , "courier" , monospace;"><b><br /></b></span>
<span style="color: #6aa84f; font-family: "courier new" , "courier" , monospace;"><b>**** Settings ***</b></span></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<span style="font-family: "courier new" , "courier" , monospace;"><b><span style="color: #d55fde;">Library</span><span style="color: #bbbbbb;"> </span><span style="color: #89ca78;">ScreenCapLibrary</span></b></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><b><span style="color: #89ca78;"><br /></span></b></span></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<div style="font-family: "times new roman", serif;">
<span lang="PT-BR"><br /></span></div>
<h3>
<span lang="PT-BR" style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">03.1 - Comandos Básicos</span></h3>
<div>
<span lang="PT-BR"><span style="font-family: "trebuchet ms" , sans-serif;">Você vai chamar a <i>keyword</i> que inicia a gravação antes do trecho do seu teste desejado e vai chamar a <i>keyword</i> que para a gravação após o seu trecho.</span></span><br />
<span lang="PT-BR"><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></span>
<span lang="PT-BR"><span style="font-family: "trebuchet ms" , sans-serif;"><b style="font-size: 12pt;"><span style="color: #a64d79;">#FICAADICA: </span></b>Se for pra gravar tudo, coloquem no <i><b>Suite Setup (o start)</b></i> e <i><b>Suite Teardown (o stop)</b></i>!</span><span style="font-family: "times new roman" , serif;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="font-family: "Times New Roman", serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<div>
<span font-family:="" lang="PT-BR" ms="" sans-serif="" trebuchet=""><br /></span></div>
</div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif; font-size: 12pt;"><b>Gravando GIF:</b></span></div>
<div class="MsoNormal" style="font-family: "Times New Roman", serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="background: black; font-family: "Times New Roman", serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<span style="color: #d8985f; font-family: "menlo"; font-size: 9pt;"> </span><span style="color: #bbbbbb; font-family: "menlo"; font-size: 9pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<b><span style="font-family: "courier new" , "courier" , monospace;"><i><span style="color: #999999;">#Inicia gravação de GIF</span></i><span style="color: #bbbbbb;"><o:p></o:p></span></span></b></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<b><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: #52adf2;">Start Gif Recording</span><span style="color: #bbbbbb;"><o:p></o:p></span></span></b></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<b><span style="font-family: "courier new" , "courier" , monospace;"><i><span style="color: #999999;">#Parar Gravação GIF</span></i><span style="color: #bbbbbb;"><o:p></o:p></span></span></b></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<b><span style="font-family: "courier new" , "courier" , monospace;"><span style="color: #52adf2;">Stop </span><span lang="PT-BR" style="color: #52adf2;">Gif</span><span style="color: #52adf2;"> Recording</span></span></b><span style="color: #bbbbbb; font-family: "menlo"; font-size: 9pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="background: black; font-family: "Times New Roman", serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<span lang="PT-BR"><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></span>
<span lang="PT-BR"><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></span>
<span lang="PT-BR"><span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><b>Gravando Vídeos:</b></span><span style="font-family: "times new roman" , serif;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="font-family: "Times New Roman", serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="background: black; font-family: "Times New Roman", serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<span style="color: #d8985f; font-family: "menlo"; font-size: 9pt;"> </span><span style="color: #bbbbbb; font-family: "menlo"; font-size: 9pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<span style="color: #999999;"><span style="font-family: "courier new" , "courier" , monospace;"><b><i>#Inicia gravação de </i></b></span><b style="font-family: "Courier New", Courier, monospace;"><i><span style="color: #5c6370; font-family: "menlo"; font-size: 9pt;">Vídeo</span></i></b></span></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<span style="font-family: "courier new" , "courier" , monospace;"><b><span style="color: #52adf2;">Start </span><span lang="PT-BR" style="color: #52adf2;">Video</span><span style="color: #52adf2;"> Recording</span><span style="color: #bbbbbb;"><o:p></o:p></span></b></span></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<span style="font-family: "courier new" , "courier" , monospace;"><b><span style="color: #d8985f;"> </span><span style="color: #bbbbbb;"><o:p></o:p></span></b></span></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<span style="font-family: "courier new" , "courier" , monospace;"><b><i><span style="color: #999999;">#Parar Gravação Vídeo</span></i><span style="color: #bbbbbb;"><o:p></o:p></span></b></span></div>
<div class="MsoNormal" style="background: black; line-height: 13.5pt; margin: 0cm 0cm 0.0001pt;">
<span style="font-family: "courier new" , "courier" , monospace;"><b><span style="color: #52adf2;">Stop </span><span lang="EN-US" style="color: #52adf2;">Video</span></b><span style="color: #52adf2;"><b> Recording</b><o:p></o:p></span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="color: #52adf2;"><b><br /></b></span></span></div>
<div class="MsoListParagraph" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;">
<br /></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<span lang="PT-BR" style="font-family: "trebuchet ms" , sans-serif;"><b style="font-size: 12pt;"><span style="color: #a64d79;">#FICAADICA:</span></b><span style="font-family: "trebuchet ms" , sans-serif; font-size: 12pt; text-indent: -18pt;"> Lembre-se de colocar um <i>sleep </i>nos pontos de evidência, para que esses pontos fiquem facilmente visíveis durante a execução do GIF/Vídeo. Se for <i>web testing</i>, também dá pra configurar a velocidade do <i>Selenium </i>com a keyword <a href="http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Set%20Selenium%20Speed"><b><span style="color: #a64d79;">Set Selenium Speed</span></b></a>.</span></span><br />
<span lang="PT-BR" style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span lang="PT-BR" style="font-family: "trebuchet ms" , sans-serif;">Sim!! Simples e fácil de aplicar e a biblioteca permite customizar a pasta de destino dos arquivos, nome dos arquivos e inclusive resolução, veja as demais <i>keywords </i>e parâmetros disponíveis na documentação.</span><br />
<span lang="PT-BR" style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span lang="PT-BR" style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<span lang="PT-BR" style="font-family: "trebuchet ms" , sans-serif;">Espero que tenham gostado desse help rápido, abaixo estão links para as documentações oficiais, fiquem bem e um forte abraço.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<a href="https://mihaiparvu.github.io/ScreenCapLibrary/ScreenCapLibrary.html" style="font-family: "trebuchet ms", sans-serif; font-size: 12pt;">https://mihaiparvu.github.io/ScreenCapLibrary/ScreenCapLibrary.html</a></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<span style="font-family: "trebuchet ms" , sans-serif;"><a href="https://pypi.org/project/robotframework-screencaplibrary/">https://pypi.org/project/robotframework-screencaplibrary/</a></span></div>
<div class="MsoNormal" style="font-size: 12pt; margin: 0cm 0cm 0.0001pt;">
<span style="font-family: "trebuchet ms" , sans-serif;"><a href="https://mihaiparvu.github.io/ScreenCapLibrary/ScreenCapLibrary.html#Importing">https://mihaiparvu.github.io/ScreenCapLibrary/ScreenCapLibrary.html#Importing</a></span></div>
</div>
Bruno Longohttp://www.blogger.com/profile/12430266302648541252noreply@blogger.com1tag:blogger.com,1999:blog-264869294855361788.post-73009308548029842742020-02-20T08:52:00.000-08:002020-02-20T08:52:16.874-08:00Season Editores - Ep. 04: ATOM - Configurando o ATOM para o Robot Framework<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4g1L6RiUzalhOLIJHZmOsVUvLFiY709G0QIxtW94b6wtEh8Fzq4rtFsjgCD_GsZPdt9SQ87DtMM7ifT4ZhNkzm8apYD5YskhOiZ2NTzHq6CXTv0NUxHP5T3ckQmuuSt4pPkLt6_KQbw_1/s1600/if_Robot_01_385831.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4g1L6RiUzalhOLIJHZmOsVUvLFiY709G0QIxtW94b6wtEh8Fzq4rtFsjgCD_GsZPdt9SQ87DtMM7ifT4ZhNkzm8apYD5YskhOiZ2NTzHq6CXTv0NUxHP5T3ckQmuuSt4pPkLt6_KQbw_1/s1600/if_Robot_01_385831.png" /></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><span style="font-family: "trebuchet ms" , sans-serif;">Olááááá robotizadores!!! May Fernandes de volta aqui para mostrar como uso o meu ATOM para trabalhar com o Robot Framework!!! Gogogo robotizar com o ATOM!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div style="text-align: center;">
<br /></div>
<br />
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">1 - Caso ainda não conheça o ATOM, seguem os passos para instalar o editor e as extensões</span></h2>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Faça o download e instale <a href="https://atom.io/">https://atom.io/</a></span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Após instalá-lo, vá no menu <span style="color: #cfe2f3;"><i>Packages -> Settings View -> Open (ou Ctrl+Vírgula) -> Install</i></span>, digite na barra de busca que aparecer o nome das extensões citadas nesse post e clique em <span style="color: #b6d7a8;"><span style="color: #b6d7a8;">"</span><i><span style="color: #cfe2f3;">Install</span></i><span style="color: #b6d7a8;">"</span></span>, espere instalar e se o ATOM sugerir para reiniciá-lo, então reinicie!</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Após instalado, o <i>plugin </i>disponibilizará o botão "<span style="color: #cfe2f3;"><i>Settings</i></span>" para você poder acessar as configurações dele.</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Para acessar os <i>plugins </i>já instalados, vá em </span><i style="color: #cfe2f3; font-family: "trebuchet ms", sans-serif;">Packages -> Settings View -> Open (ou Ctrl+Vírgula) -> Packages.</i></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMiBV-Kk28PDgGlSMbFu2qw75UfbuGbbNkf2ZPOidreUb5zpsqVHRQAQNmsDhvpXDV8qDmLS2PeMbkNIcX4Q0AtL8eQaMhjO6ClGsiXui70gAMzBrikBDSqTghyE6n5PmnAnP8CgK3UD9Q/s1600/settings_install.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="535" data-original-width="1039" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMiBV-Kk28PDgGlSMbFu2qw75UfbuGbbNkf2ZPOidreUb5zpsqVHRQAQNmsDhvpXDV8qDmLS2PeMbkNIcX4Q0AtL8eQaMhjO6ClGsiXui70gAMzBrikBDSqTghyE6n5PmnAnP8CgK3UD9Q/s1600/settings_install.png" /></a></div>
<h2>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></h2>
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">2 - Extensões do ATOM que eu utilizo</span></h2>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><a href="https://atom.io/packages/language-robot-framework" style="color: #6fa8dc; font-weight: bold;">language-robot-framework</a> by wingyplus</span></li>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Essa é a extensão que reconhece a linguagem robot e interpreta os arquivos <i>.robot </i>destacando com cores os itens como variáveis, nome de keywords, seções, etc.</span></li>
</ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #d0e0e3;"><b><a href="https://atom.io/packages/autocomplete-robot-framework"><span style="color: #6fa8dc;">autocomplete-robot-framework</span></a></b><span style="color: #d0e0e3;"> </span></span>by gliviu</span></li>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Essa é extensão "<i>Intellisense</i>" que sugere e auto completa as <i>keywords</i>.</span></li>
</ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><a href="https://atom.io/packages/hyperclick-robot-framework"><b><span style="color: #6fa8dc;">hyperclick-robot-framework</span></b></a><span style="color: #d0e0e3;"> </span>by gliviu</span></li>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Essa permite o CTRL+click nas keywords e redirecionamento para a implementação da mesma.</span></li>
</ul>
</ul>
<h3>
</h3>
<ul></ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSbCPNW-EFkcn_YpcjlYjpUGdh7Ff485v6Q00BlXWowX7O5soHQPBqI91Yw0fy_28TpEcPMBzwQ6KwmOMg8NmFEsM7Mf7zfJLHjliABx1VmE38CF0VyzT0BU9tMVXZeuLZVwTaosgrOTXo/s1600/packages_robot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="546" data-original-width="778" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSbCPNW-EFkcn_YpcjlYjpUGdh7Ff485v6Q00BlXWowX7O5soHQPBqI91Yw0fy_28TpEcPMBzwQ6KwmOMg8NmFEsM7Mf7zfJLHjliABx1VmE38CF0VyzT0BU9tMVXZeuLZVwTaosgrOTXo/s1600/packages_robot.png" /></a></div>
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;"><br /></span></h2>
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">2.1 - Ajuste na extensão language-robot-framework</span></h2>
<span style="font-family: Trebuchet MS, sans-serif;">Houve uma atualização recente no plugin do Language-Robot Framework que deixou ele com a cor da sintaxe diferente, eu particularmente não gostei, pois os casos de teste e seus passos ficaram todos da mesma cor, então arrumei o plugin manualmente para ficar como antes e destacar as palavras do <i>Gherkin </i>também, seguem instruções para quem quiser fazer também:</span><br />
<div>
<span style="color: #6fa8dc; font-family: Trebuchet MS, sans-serif;">
<div>
<ol>
<li><span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;"><div>
Baixe o arquivo <i><b><span style="color: #6fa8dc;">robottxt.cson</span></b></i> do meu <a href="https://github.com/mayribeirofernandes/testesrobotframework/tree/master/language-robot-framework/grammars">GitHub</a></div>
</span></li>
<li><span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;"><div>
Feche o ATOM.</div>
</span></li>
<li><span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;"><div>
Substitua o arquivo <i><b><span style="color: #6fa8dc;">robottxt.cson</span></b></i> no diretório de instalação do ATOM, no meu caso foi: <i><span style="color: #6fa8dc;"><b>C:\Users\may.fernandes\.atom\packages\language-robot-framework\grammars</b></span></i>. Verifique o diretório correspondente a sua instalação do ATOM.</div>
</span></li>
<li><div>
Abra o ATOM novamente.</div>
</li>
</ol>
</div>
</span></div>
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;"><br /></span></h2>
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">3 - Habilitando o terminal no próprio ATOM</span></h2>
<h3>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">#FICAADICA: Terminal no ATOM</span></h3>
<div>
<span ms="" quot="" sans-serif="" style="font-family: "trebuchet ms" , sans-serif;" trebuchet="">Eu particularmente gosto muito de executar os testes dentro do próprio ATOM, então para isso habilito um <i>plugin </i>de terminal, assim fica tudo na mesma tela:</span></div>
<div>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><a href="https://atom.io/packages/platformio-ide-terminal" style="color: #6fa8dc; font-weight: bold;">platformio-ide-terminal</a> by platiformio</span></li>
<ul>
<li><span style="font-family: "trebuchet ms", sans-serif;">Após instalar esse plugin eu modifico o </span><i style="font-family: "trebuchet ms", sans-serif;">shell </i><span style="font-family: "trebuchet ms", sans-serif;">que ele irá usar e coloco o CMD do Windows. Para isso vá no Settings do plugin, no campo </span><i style="font-family: "trebuchet ms", sans-serif;">Shell Override</i><span style="font-family: "trebuchet ms", sans-serif;"> e cole o diretório do seu </span><i style="font-family: "trebuchet ms", sans-serif;">shell </i><span style="font-family: "trebuchet ms", sans-serif;">preferido, no meu caso foi </span><i style="font-family: "trebuchet ms", sans-serif;"><b><span style="color: #6fa8dc;">C:\Windows\system32\cmd.exe</span></b></i><span style="font-family: "trebuchet ms", sans-serif;">.</span></li>
</ul>
</ul>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOzm1P7kxYfYFhZr9h3p0CP64vvZ2drfybTEpdOjbYqL8TZYJhkfFMDD44wWV2p77RD9H9CiTAl1KLUqfWN2bFjXXa6emxRq_r7VlwpUqoOEUgP60vWDeuFd6oeRYixkJ2RXVQS72aY-DB/s1600/shell.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="82" data-original-width="784" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOzm1P7kxYfYFhZr9h3p0CP64vvZ2drfybTEpdOjbYqL8TZYJhkfFMDD44wWV2p77RD9H9CiTAl1KLUqfWN2bFjXXa6emxRq_r7VlwpUqoOEUgP60vWDeuFd6oeRYixkJ2RXVQS72aY-DB/s1600/shell.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: Trebuchet MS, sans-serif;">Aí para abrir o terminal no ATOM eu clico no + que fica no rodapé:</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8DX76lJTpViYtO255U6iIcEXAZKKJZAwsLkv4MxU1oildui-EeJ7TFlw6y2H9KnuuQ-UGKMCVgpc-rKEf4rGegCl1ZjQpGoa2HS60wbnERrBr-VmpI0LeIbJy5MgGtDFJhYzibwjqCi2l/s1600/terminal.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="734" data-original-width="1358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8DX76lJTpViYtO255U6iIcEXAZKKJZAwsLkv4MxU1oildui-EeJ7TFlw6y2H9KnuuQ-UGKMCVgpc-rKEf4rGegCl1ZjQpGoa2HS60wbnERrBr-VmpI0LeIbJy5MgGtDFJhYzibwjqCi2l/s1600/terminal.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"></span><br />
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">4 - EXTRA: Agora seguem as "firulas" que uso, outros <i>plugins </i>para customização e produtividade (não necessariamente para Robot)</span></h2>
<div>
<ul>
<li><span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">file-icons</span></li>
<li><span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">gitlab-manager</span></li>
<li><span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">highlight-selected</span></li>
<li><span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">open-in-browsers</span></li>
<li><span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">tool-bar e tool-bar-main</span></li>
</ul>
</div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">E é isso pessoal ATOMzeiro, é assim que uso meu ATOM para escrever e executar os meus testes do Robot Framework! Até a próxima!!</span></div>
Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com2tag:blogger.com,1999:blog-264869294855361788.post-46694181966979165112020-02-20T07:44:00.001-08:002020-02-20T07:53:16.665-08:00Season Editores - Ep. 02: Visual Studio Code - Configurando o VS Code para o Robot Framework<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4g1L6RiUzalhOLIJHZmOsVUvLFiY709G0QIxtW94b6wtEh8Fzq4rtFsjgCD_GsZPdt9SQ87DtMM7ifT4ZhNkzm8apYD5YskhOiZ2NTzHq6CXTv0NUxHP5T3ckQmuuSt4pPkLt6_KQbw_1/s1600/if_Robot_01_385831.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4g1L6RiUzalhOLIJHZmOsVUvLFiY709G0QIxtW94b6wtEh8Fzq4rtFsjgCD_GsZPdt9SQ87DtMM7ifT4ZhNkzm8apYD5YskhOiZ2NTzHq6CXTv0NUxHP5T3ckQmuuSt4pPkLt6_KQbw_1/s1600/if_Robot_01_385831.png" /></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><span style="font-family: "trebuchet ms" , sans-serif;">Olááááá robotizadores!!! Sou o Jones Sabino e estou aqui no post de hoje para falar sobre como configurar o Visual Studio Code para trabalhar com o Robot Framework! Gogogo Robotizar no VS Code!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div style="text-align: center;">
<br /></div>
<br />
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">Hello Word!</span></h2>
<span style="font-family: "trebuchet ms" , sans-serif;">Sou o Jones Sabino, engenheiro de software e entusiasta do Robot Framework. Tenho utilizado o RF para os mais diversos tipos de automação e cada vez mais me encanto com a robustez e alcance dessa ferramenta.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #eeeeee;"><br /></span>
Uma galera tem tido problemas para configurar as extensões do RF no <i>VS Code</i> e fazer funcionar o <i>auto complete</i> e <i>syntax highlighting</i>. Então hoje vou deixar a dica aqui de como eu configuro meu editor para que esses recursos funcionem e nossa produtividade aumente na hora de robotizar.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br />
Apresentações feitas, vamos ao trabalho!</span><br />
<br />
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">1 - Caso ainda não conheça o Visual Studio Code, seguem os passos para instalar o editor e as extensões</span></h2>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Faça o download e instale <a href="https://code.visualstudio.com/download" target="_blank">https://code.visualstudio.com/download</a></span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Após instalá-lo, vá no menu <span style="color: #d0e0e3;"><i>View -> Extensions (ou Ctrl+Shift+x)</i></span>, digite na barra de busca que aparecer o nome das extensões citadas abaixo e clique em <span style="color: #b6d7a8;">"Install"</span>, espere instalar e clique em <span style="color: #d0e0e3;">"Reload"</span>, se aparecer esse botão (tem extensão que não pede reload).</span></li>
</ul>
<h2>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></h2>
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">2 - Extensões Visual Studio Code que eu utilizo</span></h2>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #d0e0e3;">Robot Framework Intellisense</span> by Tomi Turtiainen</span></li>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Essa é a principal extensão, sugiro a leitura da documentação dela pois não abordarei todos os seus recursos aqui.</span></li>
</ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #d0e0e3;">RobotF Extension</span> by KMK Labs</span></li>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Essa só complementa alguns <i>auto completes</i> das sessões que a extensão acima ainda não possui.</span></li>
</ul>
</ul>
<h3>
</h3>
<ul>
</ul>
<h2>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">3 - Com tudo instalado, vamos configurar nosso projeto</span></h2>
<h3>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">#FICAADICA: Crie um Workspace!</span></h3>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Recomendo fortemente o uso dos <i><b>workspaces</b></i>, por dois motivos:</span></li>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">As configurações aplicadas de maneira global, no arquivo <i>settings.json</i>, às vezes param de funcionar sem motivo aparente, com o projeto salvo como <i>workspace</i>, ele terá seu próprio arquivo de configurações, e eu nunca tive problemas dessa forma.</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Suas configurações de editor ficam separadas por projeto, o que deixa tudo MUITO mais organizado quando você trabalha com diferentes tipos de projeto.</span></li>
</ul>
</ul>
<div>
<h3>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">
Salvando a pasta raiz do seu projeto como um <i>Workspace</i></span></h3>
</div>
<div>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Com a pasta do projeto aberta no VS code, vá até <span style="color: #d0e0e3;"><i>File > Save Workspace as...</i> </span></span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Vai aparecer uma caixa de dialogo do Windows, dê um nome para seu <i>workspace </i>e clique em <span style="color: #d0e0e3;">'<i>Save</i>'</span>.</span></li>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Um arquivo <span style="color: #d0e0e3;"><i>.code-workspace</i></span> vai ser criado na raiz do seu projeto.</span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWbvFJoPKfFCwtl4FPBzkjP0zuYGyvdDP9xqC0o8IJwiXugV6vxmsvcapMLeyvHWtfbAV2wzDUYwAs2yDHsu4zieQE5Fe5vkP18RGTldAK6CvocmwCuOMTMI91QzDEkblEF4QYz-swTeM/s1600/depois_ws.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="261" data-original-width="370" height="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWbvFJoPKfFCwtl4FPBzkjP0zuYGyvdDP9xqC0o8IJwiXugV6vxmsvcapMLeyvHWtfbAV2wzDUYwAs2yDHsu4zieQE5Fe5vkP18RGTldAK6CvocmwCuOMTMI91QzDEkblEF4QYz-swTeM/s400/depois_ws.png" width="400" /></span></a></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<h3>
<span style="color: #6fa8dc; font-family: "trebuchet ms" , sans-serif;">
Adicionando a configuração de Intellisense no seu Workspace</span></h3>
</div>
</div>
<div>
<ul>
<li><span style="font-family: "trebuchet ms" , sans-serif;">Adicione a seguinte lista dentro do objeto settings do seu arquivo <span style="color: #d0e0e3;"><i>.code-workspace</i></span>:</span></li>
</ul>
<div style="background: #272822; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"><span style="color: #999999; font-family: "trebuchet ms" , sans-serif;"> 1
2
3
4
5
6
7
8
9
10
11
12</span></pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #e6db74;">"rfLanguageServer.libraries"</span><span style="color: #f92672;">:</span> <span style="color: #f8f8f2;">[</span>
<span style="color: #e6db74;">"BuiltIn-3.1.1"</span><span style="color: #f8f8f2;">,</span>
<span style="color: #e6db74;">"Collections-3.1.1"</span><span style="color: #f8f8f2;">,</span>
<span style="color: #e6db74;">"DateTime-3.1.1"</span><span style="color: #f8f8f2;">,</span>
<span style="color: #e6db74;">"Dialogs-3.1.1"</span><span style="color: #f8f8f2;">,</span>
<span style="color: #e6db74;">"OperatingSystem-3.1.1"</span><span style="color: #f8f8f2;">,</span>
<span style="color: #e6db74;">"Process-3.1.1"</span><span style="color: #f8f8f2;">,</span>
<span style="color: #e6db74;">"Screenshot-3.1.1"</span><span style="color: #f8f8f2;">,</span>
<span style="color: #e6db74;">"SeleniumLibrary-3.3.1"</span><span style="color: #f8f8f2;">,</span>
<span style="color: #e6db74;">"Telnet-3.1.1"</span><span style="color: #f8f8f2;">,</span>
<span style="color: #e6db74;">"XML-3.1.1"</span>
<span style="color: #f8f8f2;">]</span>
</span></pre>
</td></tr>
</tbody></table>
</div>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Salve o arquivo.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Deve ficar assim:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPsQJl4emq_kMGQyXPzuNVUkjpOOdF6cLKREnXE9itvNZEwelQgDBtDh3MVivkHJ1oE9Beu87zvCRRWvEgRvIAbQ-YKaec7FRSwpFtPcbfVjwj4q4yln76Kv4TZg7qKrbtVE_RgKldJh4/s1600/depois_json.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="474" data-original-width="402" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPsQJl4emq_kMGQyXPzuNVUkjpOOdF6cLKREnXE9itvNZEwelQgDBtDh3MVivkHJ1oE9Beu87zvCRRWvEgRvIAbQ-YKaec7FRSwpFtPcbfVjwj4q4yln76Kv4TZg7qKrbtVE_RgKldJh4/s1600/depois_json.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Quando for criar um novo arquivo digite a extensão<i> <span style="color: #d0e0e3;">'.robot'</span></i> ou <span style="color: #d0e0e3;"><i>'.resource'</i></span> e ele já irá reconhecer a linguagem e quando começar a digitar as <i>keywords </i>ele irá fazer as sugestões. =D</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Vou deixar alguns <i>prints </i>de como fica aqui em baixo.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Qualquer Dúvida, estou no <span style="color: lime;">grupo 1 do WhatsApp</span> e no <span style="color: cyan;">grupo do Telegram</span>.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Abraço!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7wEBwIgruhIzJCg0sFujvTv4xvHE7BDkSOx61pCW6csGj0VgNamONx1uvtIVv314FWC50ZGosh-oW9Kkw4CNEGLcr1_1R9tusCdq7I2U_YuVJYU0K3CcuhiGZowE6knkvFPRXJdGzP5E/s1600/autoc1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="294" data-original-width="567" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7wEBwIgruhIzJCg0sFujvTv4xvHE7BDkSOx61pCW6csGj0VgNamONx1uvtIVv314FWC50ZGosh-oW9Kkw4CNEGLcr1_1R9tusCdq7I2U_YuVJYU0K3CcuhiGZowE6knkvFPRXJdGzP5E/s1600/autoc1.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMhpaQb1r019Xm7xcdpdxI6Peek0WwxodxzW5QhuEogw4d-eTfcQ1ESyKvuBceRhGPJkrMYZ5FWNfRGxd8MIs1NIFq3Vj_FLCmNeF3U79CxiwLXdBvAl9OBseTIK40R7ZYgSAHCEFita8/s1600/autoc2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="428" data-original-width="627" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMhpaQb1r019Xm7xcdpdxI6Peek0WwxodxzW5QhuEogw4d-eTfcQ1ESyKvuBceRhGPJkrMYZ5FWNfRGxd8MIs1NIFq3Vj_FLCmNeF3U79CxiwLXdBvAl9OBseTIK40R7ZYgSAHCEFita8/s1600/autoc2.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1xqESV-1dtU-lfjRLXbyDDgAplHTZ9fPHjie5KWvLkQkUOlFPBc9tn15o28YFo6f-QyCDByTXa-Cuy8f12m9nBJJGO0kOlwu6KlmB_lzlSnKiIC81FcsT8F7cnDitkRkx8vcPEvWDBr0/s1600/autoc3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="603" data-original-width="811" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1xqESV-1dtU-lfjRLXbyDDgAplHTZ9fPHjie5KWvLkQkUOlFPBc9tn15o28YFo6f-QyCDByTXa-Cuy8f12m9nBJJGO0kOlwu6KlmB_lzlSnKiIC81FcsT8F7cnDitkRkx8vcPEvWDBr0/s1600/autoc3.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
Jones Sabinohttp://www.blogger.com/profile/06338575758730523192noreply@blogger.com6tag:blogger.com,1999:blog-264869294855361788.post-84888696834321794312020-02-20T03:37:00.000-08:002020-02-20T03:39:35.339-08:00Season Libraries - Ep. 08: Library Process - Verificação de conteúdo de arquivo PDF<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" /></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"> </span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">Olááá Robotizadores!!! Hoje eu vou mostrar um exemplo de como realizar a conferência dos dados de um arquivo PDF, através da execução de um código Python externo via Library Process. <i>Let's</i> bora?</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<br />
<br />
<b style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #a64d79; font-family: "trebuchet ms", sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: bold; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">#FICADICA: </b><span style="background-color: #1d1d1d; color: #a64d79; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Lembrando
que é necessário que você já tenha uma noção sobre o Robot Framework!!!
Se ainda não tem, dá uma olhadinha nos primeiros posts do blog ou no curso da <a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/" target="_blank">Udemy</a>!!!</span><br />
<br />
<br />
<h2 style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: Roboto, sans-serif; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><b style="font-weight: bold;">01 - Instalando o código para extração dos dados</b></span></h2>
<span style="background-color: black; color: white; display: inline; float: none; font-family: monospace , monospace; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">pip install pdfminer.six</span><br />
<br />
<div style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: Roboto, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: "trebuchet ms" , sans-serif;">As Libraries </span><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a href="http://robotframework.org/robotframework/latest/libraries/OperatingSystem.html">OperatingSystem</a> e <a href="http://robotframework.org/robotframework/latest/libraries/Process.html">Process</a> utilizadas no exemplo não requerem instalação, elas já vem embutidas na instalação do Robot.</span></div>
<br />
<div style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: Roboto, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">02 - Escreva seu código no Robot Framework</span></h2>
</div>
<div style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: Roboto, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: "trebuchet ms" , sans-serif;">Segue abaixo um exemplo de um código usando o </span><span style="font-family: "trebuchet ms" , sans-serif;"><a href="https://github.com/pdfminer/pdfminer.six" target="_blank">PDF Miner</a>, e</span><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">sse
exemplo foi feito com base no cenário que funcionou no meu ambiente,
talvez seja necessários ajustes para funcionar no seu ambiente.</span></div>
<br />
<br />
<script src="https://gist.github.com/filipesalvadorsilveira/218454ea7614bc53092674e3853dffd7.js"></script>
<br />
<div style="background-color: #1d1d1d; text-indent: 0px;">
<h2 style="color: #9ba2a8; font-family: roboto, sans-serif;">
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">03 - Detalhamento do Exemplo</span></h2>
<div style="background-color: #1d1d1d; text-indent: 0px;">
<div style="color: #9ba2a8; font-family: roboto, sans-serif; font-size: 15px; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Passo 1 - Como o caminho do usuário local, muda de máquina para máquina, foi utilizada a Keyword "</span><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><b><i>Normalize Path</i></b></span><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">" para normalizá-lo, esse processo faz especificamente as seguintes coisas: </span></span></div>
<br />
<ul>
<li><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;">Recolhe separadores redundantes e referências de nível superior.</span></li>
<li><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;">Converte / para \ no Windows.</span></span></li>
<li><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;">Substitui ~ ou ~user pelo diretório inicial do usuário.</span></span></li>
</ul>
<br />
<div style="color: #9ba2a8; font-family: roboto, sans-serif; font-size: 15px; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">O caminho obtido foi colocado dentro da variável </span></span><span style="background-color: white; color: #6f42c1; font-family: , "consolas" , "liberation mono" , "menlo" , monospace; font-size: 12px; white-space: pre;">${</span><span class="pl-en" style="background-color: white; box-sizing: border-box; color: #6f42c1; font-family: , "consolas" , "liberation mono" , "menlo" , monospace; font-size: 12px; white-space: pre;">home_dir</span><span style="background-color: white; color: #6f42c1; font-family: , "consolas" , "liberation mono" , "menlo" , monospace; font-size: 12px; white-space: pre;">}</span><span style="font-family: "trebuchet ms" , sans-serif;"> </span></div>
<div style="color: #9ba2a8; font-family: roboto, sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;">
<br /></div>
<div style="color: #9ba2a8; font-family: roboto, sans-serif; font-size: 15px; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Passo 2 - Foi utilizado a Keyword "</span><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><b><i>Join Path</i></b></span><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">" para realizar a concatenação do caminho obtido na </span></span><span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif;">variável </span></span><span style="background-color: white; color: #6f42c1; font-family: , "consolas" , "liberation mono" , "menlo" , monospace; font-size: 12px; white-space: pre;">${</span><span class="pl-en" style="background-color: white; box-sizing: border-box; color: #6f42c1; font-family: , "consolas" , "liberation mono" , "menlo" , monospace; font-size: 12px; white-space: pre;">home_dir</span><span style="background-color: white; color: #6f42c1; font-family: , "consolas" , "liberation mono" , "menlo" , monospace; font-size: 12px; white-space: pre;">}</span><span style="font-family: "trebuchet ms" , sans-serif;"> com o diretório onde encontra-se o arquivo.</span></div>
<div style="color: #9ba2a8; font-family: roboto, sans-serif; font-size: 15px; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;">Passo</span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;"> </span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;">3 - </span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;">Foi utilizado a Keyword "<b><i>List Directory</i></b>" para filtrar todos os arquivos que contenham uma determinada nomenclatura. Essa keyword tem como resultado uma lista de arquivos, a qual deve ser armazenada em uma variável do tipo lista. Para saber mais sobre tipos de variáveis, leia o artigo "</span></span><a href="http://robotizandotestes.blogspot.com/2018/04/season-scripts-ep-03-tipos-de-variaveis.html" target="_blank">Season Scripts - Ep. 03: Tipos de variáveis e seu uso</a><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;">".</span><br />
<div style="color: #9ba2a8; font-family: roboto, sans-serif; font-size: 15px; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;">Passo</span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;"> </span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;">4</span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;"> </span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;">- Novamente foi utilizado a Keyword "<i><b>Join Path</b></i>", só que dessa vez ela concatenou o caminho obtido no passo 2 com o nome do arquivo obtido no passo 3. </span></span><br />
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;"><br /></span></span>
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;">Passo 5 - Agora será utilizada a Keyword "</span><b style="font-size: 15px;"><i>Run Process</i></b><span style="font-size: 15px;">" para rodar o código Python que foi instalado para extrair o conteúdo do arquivo PDF.</span></span><br />
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;"><br /></span></span>
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;">Passo 6 - Por fim será </span></span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;">utilizada</span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;"> </span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;">a Keyword "</span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;"><b><i>Get Process Result</i></b></span></span><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;">" para capturar a saída do processo.</span><br />
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;"><br /></span>
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;">Passos 7 e 8 - A utilização das Keywords "<b><i>Log</i></b>" e "<b><i>Log To Console</i></b>" são opcionais, contudo em caso de erro, elas serão de grande auxílio.</span><br />
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;"><br /></span>
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;">Passo 9 - Para finalizar o teste, foi utilizada a keyword "</span><i><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;"><b>Should Contain</b></span></span></i><span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 15px;">" para verificar se o texto extraído do PDF, contém o conteúdo esperado.</span></span><br />
<span style="color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px;"><br /></span>
<br />
<div style="color: #9ba2a8; font-family: roboto, sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4qlnIUVya7VK-Jkbqurq_lVEvwmrfhx465gzS6jR09lYPIyCG46XYbDTGDC48DnwQJyQ69nSXrVceDhd-v7r3YxGcSGEgoUBUr5wzgKpRcMFOyRMAyCQKiIaA0ZGTeCi9Oh0rFj_6zNQx/s1600/logPDFtoText.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="896" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4qlnIUVya7VK-Jkbqurq_lVEvwmrfhx465gzS6jR09lYPIyCG46XYbDTGDC48DnwQJyQ69nSXrVceDhd-v7r3YxGcSGEgoUBUr5wzgKpRcMFOyRMAyCQKiIaA0ZGTeCi9Oh0rFj_6zNQx/s1600/logPDFtoText.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Visualização detalhada das </span><i style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: "Trebuchet MS", sans-serif; font-size: 15px; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">keywords </i><span style="background-color: #1d1d1d; color: #9ba2a8; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-weight: 400; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">de Extração dos Dados do PDF</span><i style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: "Trebuchet MS", sans-serif; font-size: 15px; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><br /></i></td></tr>
</tbody></table>
<span id="goog_1133314854"></span><span id="goog_1133314855"></span><br /></div>
</div>
</div>
<div style="background-color: #1d1d1d; color: #9ba2a8; font-size: 15px; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<h2 style="font-family: roboto, sans-serif; font-style: normal;">
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">04 - Considerações sobre a Execução</span> </h2>
<span style="font-family: "trebuchet ms" , sans-serif;">A
execução ocorre em segundo plano, ou seja, ele não abre nenhum terminal
extra durante os testes, contudo se você usar a keyword </span><span style="font-family: "trebuchet ms" , sans-serif;">"<b><i>Log To Console</i></b>" apontando para saída do processo, ela poderá ser
visualizada no terminal que está executando os testes. </span><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgndxvnczyVK0KK2BBNLRSkiE99eb4ZysmOLU9RjNZsHHeGJj_QJcEdI5yYpx_A0sygxsL38_a7pHmRiGdaE0iL_t-EyB1GZzEM5b_MqpWiB0bC3VdlQeTmUehR68PtiVqlcglnuELL89ur/s1600/ConsoleLogPDFtoText.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="520" data-original-width="715" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgndxvnczyVK0KK2BBNLRSkiE99eb4ZysmOLU9RjNZsHHeGJj_QJcEdI5yYpx_A0sygxsL38_a7pHmRiGdaE0iL_t-EyB1GZzEM5b_MqpWiB0bC3VdlQeTmUehR68PtiVqlcglnuELL89ur/s1600/ConsoleLogPDFtoText.png" /></a></span></div>
<br />
<div style="font-style: normal;">
<span style="font-family: "trebuchet ms" , sans-serif;"></span></div>
<div style="font-style: normal;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">E aí o que acharam???? O exemplo supracitado está disponível no meu </span><a href="https://gist.github.com/filipesalvadorsilveira/218454ea7614bc53092674e3853dffd7" style="background: rgb(29, 29, 29); color: #2196f3; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" target="_blank">GitHub</a><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> ... Abraço robotizadores!!! </span><span class="QXzCSe"><span class="fJyiwb" id="tw-bil-st"><i>See you later</i>!</span></span></span> </div>
Filipe Salvador Silveirahttp://www.blogger.com/profile/12612849904366836323noreply@blogger.com2tag:blogger.com,1999:blog-264869294855361788.post-72644722509740397212020-01-08T11:21:00.002-08:002020-02-20T07:46:07.250-08:00Season Editores - Ep. 03: Visual Studio Code - Configurando Tabulação pro Robot no VS Code<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMrMnDv7YzqmDpwKlf2jYvOn7NO1T4yixsLQjcElsvQF9E8Pi6zjIpm75tlUOU_Jv6dEoR7NH7B_JeNaeVusnoYR9Z_8xdNzSGoquKd2GCm_AM9Ww7enI_6oTaxFF2LuNeMyD7giCR5Isk/s1600/if_Robot_01_385831.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMrMnDv7YzqmDpwKlf2jYvOn7NO1T4yixsLQjcElsvQF9E8Pi6zjIpm75tlUOU_Jv6dEoR7NH7B_JeNaeVusnoYR9Z_8xdNzSGoquKd2GCm_AM9Ww7enI_6oTaxFF2LuNeMyD7giCR5Isk/s1600/if_Robot_01_385831.png" /> </span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;">Olá robotizadores, tudo beeemmmm? Sou a Gisele e estou aqui para mostrar como configurar a tabulação automática do VS Code para o RobotFramework, pois é muito sofrido ficar organizando a suíte de testes ao longo da automação né?? Vamos facilitar!! Então bora lá ... </span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<h2 style="clear: both; text-align: justify;">
<span style="color: #3d85c6; font-family: "trebuchet ms" , sans-serif;">Oi, eu sou a Gi!!!</span></h2>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;">Massss antes deixa eu falar um pouquinho sobre mim, sou QA a mais de 10 anos (velhaaaa :) ), também sou mãe, esposa e amiga. Amo minha profissão e a algum tempo tenho estudado automação e já mexi um bocadinho com o Robot, então bora mergulhar nesse sub-mundo...rs</span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<h2 style="clear: both; text-align: justify;">
<span style="color: #3d85c6; font-family: "trebuchet ms" , sans-serif;">Tabulação Automática VS Code</span></h2>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;">1 - No VS Code, vá em "<i><b>Code > Preferences > Settings</b></i>".</span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3rSmFEWCTnN9PyQxIquOMtNa6Ezh6Iqoi3-VOIvi5FYadmG2q9_5FysJhnHIk6hMMTxuaLDdEGav-GluaAaen5PcdMLIg8K4v4KYRvsxGo7Fy3do_Buo9i6ALE26J7Xxfwl1CMO6FFl7h/s1600/VS_settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="743" data-original-width="1232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3rSmFEWCTnN9PyQxIquOMtNa6Ezh6Iqoi3-VOIvi5FYadmG2q9_5FysJhnHIk6hMMTxuaLDdEGav-GluaAaen5PcdMLIg8K4v4KYRvsxGo7Fy3do_Buo9i6ALE26J7Xxfwl1CMO6FFl7h/s1600/VS_settings.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;">2 - Em "<b>Settings</b>" você deve visualizar uma barra de busca, nela vamos digitar: "<b><i>Format on save"</i></b>.</span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuRTuOdM_aCK1xVdHLevSti1TEJo7nNgyZoNB6jjUZ1Mafa28TYdGdxYOuCsi82Yq5ZZPOXzmjESzvaD7GrQ5_5W8VdL3Bnac9d4XKQuqqK1wngThWuYee9dED0FT_EhHhD7i-1naXnJHX/s1600/VS_settings_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="722" data-original-width="1230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuRTuOdM_aCK1xVdHLevSti1TEJo7nNgyZoNB6jjUZ1Mafa28TYdGdxYOuCsi82Yq5ZZPOXzmjESzvaD7GrQ5_5W8VdL3Bnac9d4XKQuqqK1wngThWuYee9dED0FT_EhHhD7i-1naXnJHX/s1600/VS_settings_2.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;">3 - Habilite a opção: "<b><i>Format a file on save...</i></b>". Lembrando que devemos <b>fechar e abrir</b> novamente o <b>VS Code</b> para funcionar.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">4 - A partir daí basta dar os dois espaços e salvar que seus arquivos vão se tabular "automaGicamente" ...rs </span></div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #3d85c6;">#FICADICA</span></b>: Outra dica bem legal é quando sua <i>keyword </i>fica muito grande e gera um <i>scroll </i>na horizontal, dificultando a visualização de todo material em uma página. Para estes casos utilize os três pontinhos para quebrar os argumentos das <i>keywords </i>em linhas, aí você terá uma melhor a visualização da sua tela.</span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvy6OIbHZ4jczkzpG4zeD_SETcUbW4Miu5ddkNSphsU7LKkH90M6bykCNFabDB_8yVH1fz6_iZbvucYx0r_hBFhTVq23vUpuZlSGXA9cLrYmMX-5dAFX9v_Bs_hTYd76DglrC9-mINWJvv/s1600/VS_settings_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="718" data-original-width="1229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvy6OIbHZ4jczkzpG4zeD_SETcUbW4Miu5ddkNSphsU7LKkH90M6bykCNFabDB_8yVH1fz6_iZbvucYx0r_hBFhTVq23vUpuZlSGXA9cLrYmMX-5dAFX9v_Bs_hTYd76DglrC9-mINWJvv/s1600/VS_settings_3.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Espero que tenha ajudado com essa dica mara!!! Até mais robotizadores. abraços da </span><span style="font-family: "trebuchet ms" , sans-serif;">Gi!!!</span>Gisele Paolahttp://www.blogger.com/profile/00559168114319787609noreply@blogger.com1tag:blogger.com,1999:blog-264869294855361788.post-7973890038200467942020-01-07T09:31:00.001-08:002020-01-07T09:35:17.361-08:00[NOVO] Nossa experiência com o Robot Framework em 2 anos e 6 meses...<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUg4V2LOZuYYQSvGP2_0kKTTj2-_LF8LIwBvWyLFcWuLcThP_8we8p8jtSNZiJzzVovPCRnSh1a94GTeNjHnhh6Z0b0LfYhl6UzBAna4Y-Uo_3LJDoWAIpfsh85GLa44wrastLWdujaueQ/s1600/if_Robot_12_385842_grande.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUg4V2LOZuYYQSvGP2_0kKTTj2-_LF8LIwBvWyLFcWuLcThP_8we8p8jtSNZiJzzVovPCRnSh1a94GTeNjHnhh6Z0b0LfYhl6UzBAna4Y-Uo_3LJDoWAIpfsh85GLa44wrastLWdujaueQ/s320/if_Robot_12_385842_grande.png" width="320" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Olááá robotizadores!!! Em jan/2018 eu fiz um post relatando minha experiência com o Robot Framework de 6 meses. E acho que chegou a hora de dizer o por que ainda estamos com ele, são 2 anos e 6 meses!!! Chega mais que vou te contar...</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Abaixo vou citar os pontos que nos fizeram continuar e estar até hoje utilizando esse framework "<i>maravilindo</i>"!!! As primeiras impressões eu citei <a href="https://robotizandotestes.blogspot.com/2018/01/nossa-experiencia-com-o-robot-framework.html">nesse post aqui</a>, confere lá se você ainda não leu!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h3>
<span style="color: #e69138; font-family: "trebuchet ms" , sans-serif;">01 - Produtividade</span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">Com a produtividade do framework:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">- Não precisamos nos preocupar com linguagem para automatizar, pois ele usa a abordagem keyword-driven com bela documentação disponível.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">- Não precisamos nos preocupar com log/report, pois o dele nos atendeu perfeitamente.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">- Não precisamos nos preocupar com ambientes, pois ele é multiplataforma e roda no nosso CI/CD lindamente.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">- Tudo que precisamos automatizar nós conseguimos e raras foram as vezes que tivemos que por a mão no Python, quando precisamos, o Python nos atendeu lindamente também!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">Tiramos vários empecilhos da frente utilizando esse framework e desde sempre entregamos testes automatizados rapidamente!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h3>
<span style="color: #e69138; font-family: "trebuchet ms" , sans-serif;">02 - Genérico e expansível</span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">Todos os projetos que apareceram para o meu time, o Robot deu conta. Hoje nossa aplicação chefe é uma aplicação de integração que envolve vários micro-serviços e tecnologias assícronas. É uma integração assíncrona com mensageria e foi necessário eu automatizar conferências em <i>RabbitMQ</i>, <i>ElasticSearch</i>, <i>Redis</i>, <i>MongoDB</i>, <i>S3 Server</i>. Temos comunicação REST e SOAP nesse escopo, conferências de PDF, JSON e XML. Em todos os casos as libraries já existentes para o Robot nos atenderam, a única que modificamos por opção nossa foi a <i>RabbitMQ </i>para ela trabalhar com HTTP e a <i>MongoDB </i>tivemos que migrar para ser compatível com Python 3, o que foi muito simples, pela facilidade e poder do Python. Fora isso, todos esses testes rodam hoje em pipeline, no <i>GitLabCI</i>, tranquilamente. Nosso Robot roda em um container docker, bem redondo!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">Hoje, incluindo outros micro-serviços que temos, já automatizamos cerca de <b><u>600 casos de teste</u></b> (na grande parte desses 2 anos e meio foram 2 QAs no time), a maioria são casos de teste de APIs, um pouco de WEB e Desktop.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h3>
<span style="color: #e69138; font-family: "trebuchet ms" , sans-serif;">03 - Usamos o ATDD a nosso favor</span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">Por termos escolhido trabalhar com <a href="https://www.infoq.com/br/articles/atdd-passo-a-passo/">ATDD</a>, padrão sugerido pelo Robot Framework, o P.O. já cria cenários no padrão BDD em que automatizamos e esses nossos cenários automatizados, ao final, servem de documentação. Além de ser um padrão a ser seguido por todos que automatizam cenários nele!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h3>
<span style="color: #e69138; font-family: "trebuchet ms" , sans-serif;">04 - Aprovação dos DEVs, independente da stack de desenvolvimento</span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">Todo o time de DEVs aprovou o uso do Robot Framework e todos já fazem manutenções nos cenários quando necessário, hoje estamos entrando em uma nova fase onde os DEVs também irão automatizar cenários do zero no Robot Framework, uma maturidade que ainda não tínhamos e que servirá para eu QA, poder ter tempo para testes de performance e segurança (nova meta do nosso time!).</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">Meu time é híbrido, temos DEVs Delphi, Java e Python, TODOS conseguem usar o Robot e o Python se necessário, a stack do time não foi empecilho para a escolha do framework!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h3>
<span style="color: #e69138; font-family: "trebuchet ms" , sans-serif;">05 - Aprendi Python e boas práticas de desenvolvimento</span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">Com o tempo fui aprendendo Python, não foi necessário saber Python para automatizar com o Robot, quero deixar isso BEM CLARO hehehe!!!! Mas me fez ter curiosidade em aprender como funcionam as libraries por baixo dos panos, e o que aprendi sobre Python me permite hoje corrigir bugs nas nossas aplicações Python (um pontão positivo pro meu time!!)</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">Também contei com a ajuda dos DEVs, em termos de boas práticas de desenvolvimento, para criar suítes e keywords do Robot bem reutilizáveis o que nos facilita em manutenção e melhora a produtividade!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h3>
<span style="color: #e69138; font-family: "trebuchet ms" , sans-serif;">06 - Comunidade</span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">Diferente de 2017, quando comecei, hoje as <a href="https://robotframework.org/#support">comunidades gringa</a> e brasileira cresceram muito e sempre quando precisei de suporte e ajuda a comunidade me atendeu!!! Temos <a href="https://robotframework.org/#documentation">documentação poderosa</a>, comunidade no <a href="https://robotframework-slack-invite.herokuapp.com/">Slack Gringo</a>, comunidade no <a href="https://join.slack.com/t/robotframeworkbrasil/shared_invite/enQtMjg4ODUwNjkxNTcyLTVjM2ZkNTgxMTkyNWQ2NzUzYmRiOGY5ZTU3NWUxZjM3ZjRkMzNjNzBlZjI1YmY4NWZhYTYzNWFmNmExY2UwMGU">Slack brasileiro</a> e <a href="https://www.blogger.com/"><span id="goog_961126711"></span>grupo de WhatsApp pt-br<span id="goog_961126712"></span></a> constantemente movimentado!!! E também tem os <a href="https://robotizandotestes.blogspot.com/2020/01/cursos-robot-framework-pt-br-udemy.html">cursos pt-br</a>!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h3>
<span style="color: #e69138; font-family: "trebuchet ms" , sans-serif;">Ponto fraco</span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">O ponto fraco, na minha visão, é a automação Desktop, ele perde em benefícios comparados à frameworks tipo <b>TestComplete</b>, mas <u><b>é possível sim</b></u> automatizar Desktop com ele, principalmente pela possibilidade de mais de um recurso, como combinar <i><b><a href="https://pypi.org/project/robotframework-autoitlibrary/">AutoItLibrary</a> </b></i>+ <b><i><a href="https://pypi.org/project/robotframework-SikuliLibrary/">SikuliLibrary </a></i></b>+ <i><b><a href="https://pypi.org/project/robotframework-whitelibrary/">WhiteLibrary</a></b></i>, por exemplo.</span><br />
<br />
<span style="font-family: "trebuchet ms" , sans-serif;">No mais, não encontramos demais empecilhos que nos fizessem querer mudar de framework, até hoje nada nos motivou a isso!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Espero que esse post ajude você a conhecer mais sobre o framework, esse é o meu ponto de vista e experiência em relação a ele, lembrando que o uso com sucesso dele dependerá do bom uso das <i><b>LIBRARIES </b></i>e estudo da <b>DOCUMENTAÇÃO </b>dele!!! Vejo muitas pessoas usando Robot, mas criando muita coisa em Python para usar nele, sendo que já existe muita coisa boa pronta para usar, não vamos reinventar a roda certo??? <b><span style="color: #e69138;">#WORKSMARTNOTHARD</span></b></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Até a próxima robotizadores e vaaaleu!!!</span>Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com2tag:blogger.com,1999:blog-264869294855361788.post-42842682268928897942020-01-07T04:04:00.052-08:002023-02-15T04:18:22.177-08:00[CURSOS] Robot Framework pt-br Udemy<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5N1_Bgt36fuAorEpn4j1gHZGjbTRjHVBBRLe1PWKooCSbohE4ZTbij8mx0Bdex5Y1mq3srYBnWzgXXxuWOCjkp2hR4NC_p4sZ2hoe-jFhjau8HgZZosBorNtGYFupFOse4vt4uhv9GstH/s1600/robotfw_mark_black_low.png" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: verdana;"><img border="0" data-original-height="400" data-original-width="400" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5N1_Bgt36fuAorEpn4j1gHZGjbTRjHVBBRLe1PWKooCSbohE4ZTbij8mx0Bdex5Y1mq3srYBnWzgXXxuWOCjkp2hR4NC_p4sZ2hoe-jFhjau8HgZZosBorNtGYFupFOse4vt4uhv9GstH/s320/robotfw_mark_black_low.png" width="320" /></span></a></div>
<span style="font-family: verdana;"><span face="">Oláááá futuros robotizadores!!! Desde 2018 nosso curso está no AR na Udemy. Simples, direto e reto!!! Um curso com classificação ótima, você aprenderá a sair do zero e se tornar mestre na automação de testes de uma vez por todas!! <b><i>#AGORAVAI</i></b> Saiba mais...</span><br />
<span face=""><br /></span><span face=""><br /></span><span face=""><br /></span><br />
</span><h2>
<span style="font-family: verdana;">Promoção</span></h2>
<div>
<span style="font-family: verdana;"><span face="">Aproveita!!! Cupom de <b>FEVEREIRO: </b></span><span face=""><span face=""><span style="color: #ffd966;"><b>ROBOT_FEV_2023 </b></span>válido até <b>17/03/2023</b></span></span><b> - 23h59</b><span face="">:</span><br />
<span face=""><br /></span></span><div><b><span style="font-family: verdana;">⭐Básico: </span></b><span style="font-family: verdana;"><b><a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?couponCode=ROBOT_FEV_2023"><span></span>https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?couponCode=ROBOT_FEV_2023</a></b></span></div></div><div><br /></div><div><div><b><span style="font-family: verdana;">⭐⭐Avançado: </span></b><span style="font-family: verdana;"><b><a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-avancado/?couponCode=ROBOT_FEV_2023">https://www.udemy.com/course/automacao-de-testes-com-robot-framework-avancado/?couponCode=ROBOT_FEV_2023</a></b></span><b><span style="font-family: verdana;"> </span></b></div><a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-avancado/?couponCode=ROBOT_FEV_012022"><br /></a><div><span style="font-family: verdana;"><b><br /></b></span></div><div><span style="font-family: verdana;"><b><br /></b></span></div><div><span style="font-family: verdana;"><span style="color: #ffa400;"><b>Se os cursos não estiverem mais em promoção, use esses links:</b></span></span></div><div><span style="font-family: verdana;"><span style="color: #ffa400;"><b><br /></b></span><b>Básico</b>: <a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?referralCode=07AE210B34B27F2BA63C">https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?referralCode=07AE210B34B27F2BA63C</a></span></div><div><span style="font-family: verdana;"><b><br /></b></span></div><div><span style="font-family: verdana;"><b>Avançado: </b></span><span style="font-family: verdana;"><a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-avancado/?referralCode=D8A16D5A4F4A3660792B">https://www.udemy.com/course/automacao-de-testes-com-robot-framework-avancado/?referralCode=D8A16D5A4F4A3660792B</a></span></div><div><span style="font-family: verdana;"><br /></span></div>
<h2><span style="font-family: verdana;"><br /></span></h2><h2>
<span style="font-family: verdana;">Instrutora</span></h2>
<h3>
<span face=""><span style="color: purple; font-family: verdana;"><i style="background-color: transparent; box-sizing: border-box; font-weight: 600; text-decoration-line: none;"><a class="instructor--title__link--1NJ6S" href="https://www.udemy.com/user/mayara-ribeiro-fernandes/" style="background-color: transparent; box-sizing: border-box; font-weight: 600; text-decoration-line: none;">Mayara "May" Fernandes</a></i></span></span></h3>
<h4>
<span style="font-family: verdana;">Specialist QA Engineer</span></h4>
<div style="text-align: justify;">
<span style="font-family: verdana;">Desde 2010 na área de testes de software, bacharel em Ciência da Computação, certificada CTAL-Test Automation Engineer, experiência com testes manuais e automatizados de desktop, web, mobile, API e micro-serviços. Atualmente trabalha como <b><i><a href="https://www.linkedin.com/in/mayfernandes/" target="_blank">Specialist QA Engineer</a></i></b> na <b><a href="https://neon.com.br/" target="_blank">Neon Pagamentos S.A.</a></b> e já atuou como <i><b>tech leader</b></i> na implantação de testes automatizados com <i>Robot Framework</i> e <i>Continuous Testing</i>. Apaixonada por automação e <i>agile testing</i>, gosta de compartilhar conhecimento e trazer novos <i>testers </i>e QAs para o mundo mágico da automação de testes!</span></div>
<h2>
<div style="text-align: justify;">
<span style="font-family: verdana;"><br /></span></div>
<a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?referralCode=07AE210B34B27F2BA63C" target="_blank"><span style="font-family: verdana;">Automação de Testes com Robot Framework - Básico</span></a></h2>
<span style="font-family: verdana;"><span face="">Esse curso tem como principal objetivo mostrar como a automação de testes pode ser legal e fácil!! O </span><i><b>Robot Framework</b></i><span face=""> propõe automação genérica de testes, ou seja, você pode automatizar sites, webapps, APIs, desktop, mobile, etc, tudo em um único framework. Ele não exige conhecimento específico em linguagem de programação, pois o objetivo dele é tornar os testes mais reaproveitáveis e fáceis com a abordagem </span><i>keyword-driven</i><span face="">, onde qualquer tester/QA pode automatizar mesmo sem ser muito técnico.</span><br />
<span face=""><br /></span><span face="">Neste curso te ensinarei os fundamentos <b>básicos </b>do framework, os passos necessários para construir um teste automatizado, explicarei as estruturas básicas que o framework disponibiliza para tornar seu teste mais completo e ao final iremos implementar duas suítes de testes: uma com Selenium testando um web app e outra com Requests testando uma API REST.</span><br />
<span face=""><br /></span><span face=""><i><b>O que você aprenderá:</b></i></span><br />
</span><ul>
<li><span style="font-family: verdana;">Você será capaz de automatizar testes de sistemas WEB e API.</span></li>
<li><span style="font-family: verdana;">Você terá as instruções necessárias para seguir adiante e automatizar também qualquer outro sistema utilizando o Robot Framework.</span></li>
</ul>
<div>
<i><b><span style="font-family: verdana;"><span face="">Há</span><span face=""> algum requisito ou pré-requisito para o curso?</span></span></b></i></div>
<ul>
<li><span style="font-family: verdana;">Necessário ter noções básicas de teste de software e noções básicas de teste de sistemas web e API.</span></li>
</ul>
<span style="font-family: verdana;"><span face=""><i><b>Para quem é este curso:</b></i></span><br />
</span><ul>
<li><span style="font-family: verdana;">QA e Analistas de Teste que querem aprender a automatizar testes de software.</span></li>
<li><span style="font-family: verdana;">Profissionais curiosos que querem aprender a automatizar testes de software.</span></li>
<li><span style="font-family: verdana;">QA e Analistas de Teste que já automatizam, mas querem conhecer mais ferramentas de automação de testes de software.</span></li>
</ul>
<div>
<div>
<span style="font-family: verdana;"><span face=""><b><i>Principais comentários:</i></b></span><br />
<span face=""><b><i><br /></i></b></span></span></div>
<div>
<span style="font-family: verdana;"><i><span face="">"Achei o curso excelente. Quero também ressaltar a dedicação e profissionalismo da instrutora deste curso, sempre presente em minhas dúvidas e de forma rápida e didática. Valeu muito."</span></i><br />
<i><span face=""><br /></span></i><i><span face="">"Gostei muito e apreseitei a empresa, estou no momento da POC onde será , acredito eu, que bem visto, pois a curva de aprendizado e bem simples, sem muito misterio."</span></i><br />
<i><span face=""><br /></span></i><i><span face="">"Para quem está iniciando na area como eu, a May tem um conhecimento profundo sobre o assunto e sempre tira as dúvidas quase que instantaneamente, ou seja é um curso ótimo para deslanchar."</span></i><br />
<br />
<i><span face="">"Ótimo curso... Começa do zero e da uma boa base para sair robotizando... E o melhor: já está disponível a continuação deste curso, o nível avançado! :D"</span></i><br />
<br />
<i><span face="">"Gostei muito do curso, bem explicadinho a May tem uma abordagem muito boa e seus ensinamentos são bem cativantes. Outra coisa bacana é o grupo no wpp com outras pessoas que utilizam a ferramenta para esclarecimento de dúvidas achei uma iniciativa muito bacana, parabéns!!!"</span></i><br />
<i><span face="" style="color: #999999;"><br /></span></i></span></div>
</div>
<h2>
<b><u><a href="https://www.udemy.com/course/draft/2534488/?referralCode=D8A16D5A4F4A3660792B" target="_blank"><span style="font-family: verdana;">Automação de Testes com Robot Framework - Avançado</span></a></u></b></h2>
<span style="font-family: verdana;"></span></div>
<div>
<span style="font-family: verdana;"><span face="">Esse curso é dedicado para quem já conhece o Robot Framework e ensinará recursos avançados para potencializar a sua automação de testes, tais como fluxos avançados de execução de teste, libraries auxiliares, criação de uma library customizada, testes web e API avançados, execução headless, execução em Docker e integração contínua!!!</span><br />
<span face=""><br /></span>
<span face="">Não conhece o Robot Framework ainda? Não tem problema, comece pelo curso "<a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?referralCode=07AE210B34B27F2BA63C" target="_blank"><b>Automação de Testes com Robot Framework - Básico</b></a>"!</span><br />
<span face=""><br /></span><span face=""><b><i>O que você aprenderá:</i></b></span><br />
</span><ul>
<li><span style="font-family: verdana;">Controle de fluxos mais avançados para testes mais complexos</span></li>
<li><span style="font-family: verdana;">Comunicação com banco de dados</span></li>
<li><span style="font-family: verdana;">Manipulação de strings, datas, sistema de arquivos e processos do S.O.</span></li>
<li><span style="font-family: verdana;">Criação de library customizada e manutenção em libraries públicas</span></li>
<li><span style="font-family: verdana;">Automação WEB: Page Objects e execução Headless</span></li>
<li><span style="font-family: verdana;">Automação API: Trabalhar com Headers, Parâmetros e Autenticação</span></li>
<li><span style="font-family: verdana;">Automação API: Templates e navegação avançada em JSON</span></li>
<li><span style="font-family: verdana;">Execução em containers Docker</span></li>
<li><span style="font-family: verdana;">BÔNUS: Execução em integração contínua CI</span></li>
</ul>
<span style="font-family: verdana;"><span face=""><b><i>Há algum requisito ou pré-requisito para o curso?</i></b></span><br />
</span><ul>
<li><span style="font-family: verdana;">Conhecimento em testes de software</span></li>
<li><span style="font-family: verdana;">Já conhecer o básico de automação de testes com o Robot Framework</span></li>
<li><span style="font-family: verdana;"><span face="">Ou ter completado o curso level básico: </span><b><a href="https://www.udemy.com/course/automacao-de-testes-com-robot-framework-basico/?referralCode=07AE210B34B27F2BA63C" target="_blank">Automação de Testes com Robot Framework - Básico</a></b></span></li>
</ul>
<span style="font-family: verdana;"><span face=""><i><b>Para quem é este curso:</b></i></span><br />
<span face=""></span><br />
<span face="">Pessoas que já praticam automação de testes com o Robot Framework e querem se aprimorar para criar testes mais complexos, eficientes e completos.</span></span></div>
Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com15tag:blogger.com,1999:blog-264869294855361788.post-36532700420239630462019-11-20T10:12:00.000-08:002019-11-21T04:11:55.590-08:00Season Libraries - Ep. 07: SSHLibrary - Execução de comandos do Secure Shell<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" /></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"> </span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">Olááá Robotizadores!!! Prazer, eu sou o robotizador <b><span style="color: #741b47;">Filipe Salvador Silveira</span></b> e invadi com autorização =D esse blog para mostrar um exemplo simples de execução de script no <b><span style="color: #741b47;">Secure Shell</span></b>, através do nosso querido Robot Framework. <i>Let's</i> bora?</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<br />
<br />
<b style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #a64d79; font-family: "trebuchet ms", sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: bold; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">#FICADICA: </b><span style="background-color: #1d1d1d; color: #a64d79; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Lembrando que é necessário que você já tenha uma noção sobre o Robot Framework!!! Se ainda não tem, dá uma olhadinha nos primeiros posts do blog!!!</span><br />
<br />
<br />
<h2 style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: Roboto, sans-serif; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><b style="font-weight: bold;">01 - Instalação da library SSHLibrary</b></span></h2>
<span style="background-color: black; color: white; display: inline; float: none; font-family: monospace , monospace; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">pip install robotframework-sshlibrary</span><br />
<br />
<br />
<div style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: Roboto, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">02 - Escreva seu código no Robot Framework</span></h2>
</div>
<div style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: Roboto, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: "trebuchet ms" , sans-serif;">Segue abaixo um exemplo simples de código usando a </span><span style="font-family: "trebuchet ms" , sans-serif;">biblioteca <a href="http://robotframework.org/SSHLibrary/SSHLibrary.html" target="_blank">SSHLibrary</a>, e</span><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">sse exemplo foi feito com base no cenário que funcionou no meu ambiente, talvez seja necessários ajustes para funcionar no seu ambiente.</span></div>
<div style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: Roboto, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-stroke-width: 0px; background-color: #1d1d1d; color: #9ba2a8; font-family: Roboto, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="background-color: black; color: white; display: inline; float: none; font-family: monospace , monospace; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"></span></div>
<br />
<script src="https://gist.github.com/filipesalvadorsilveira/b68aa4de2bbcc5e63dbc1f59b9c61d19.js"></script> <br />
<div style="background-color: #1d1d1d; color: #9ba2a8; font-family: roboto, sans-serif; font-size: 15px; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<h2 style="font-style: normal; font-weight: 400;">
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">03 - Considerações sobre o exemplo</span></h2>
<div style="background-color: #1d1d1d; color: #9ba2a8; font-family: roboto, sans-serif; font-size: 15px; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">01 - </span>Conforme já mencionado acima, o exemplo foi baseado em um cenário que funcionou na minha realidade, mas existe outras <i style="font-weight: 400;">keywords</i>, com formas diferentes de executar um comando de Shell Script, eu usei "<i><b>Write</b></i>" combinado com "<b><i>Read Until Prompt" </i></b>e<b><i> "Read</i></b>", outra forma por exemplo seria "<i><b>Start Command</b></i>" combinado com "<b><i>Read Command Output</i></b>". </span><br />
<div style="font-style: normal; font-weight: 400;">
<br /></div>
<div style="font-style: normal; font-weight: 400;">
<span style="font-family: "trebuchet ms" , sans-serif;">Aconselho a darem uma lida na documentação oficial da <b>SSHLibrary</b> </span><span style="font-family: "trebuchet ms" , sans-serif;"><a href="http://robotframework.org/SSHLibrary/SSHLibrary.html" target="_blank">clicando aqui</a></span><span style="font-family: "trebuchet ms" , sans-serif;">, e ir testando todas as formas de execução de comandos contidas nela, até encontrar aquela que se adapta melhor a sua realidade. </span></div>
<div style="font-style: normal; font-weight: 400;">
<br /></div>
<span style="font-family: "trebuchet ms" , sans-serif; font-style: normal; font-weight: 400;"><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-family: "trebuchet ms" , sans-serif; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">02 - A</span>ntes de realizar qualquer comando de </span><span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;">Shell Script, se faz necessário abrir a conexão com o banco de dados e após a execução de todos os comandos, é aconselhável fechar a conexão, no exemplo acima a abertura de conexão está no <i style="font-weight: 400;">TestCase </i>"<b><i>Open Connection And Log In</i></b>" e encerramento da conexão está no "<b><i>Close SSH Connection</i></b>", é recomendável usar esses dois <i>test cases</i> dentro do <b><i>Setup </i></b>e <b><i>Teardown </i></b>respectivamente, caso não saiba fazer isso, aconselho a ler o post <a href="https://robotizandotestes.blogspot.com/2017/10/season-scripts-ep-02-setup-e-teardown.html" style="font-style: normal; font-weight: 400;">Season Scripts - Ep. 02: Setup e Teardown</a> da </span></span><span style="font-family: "trebuchet ms" , sans-serif; font-style: normal; font-weight: 400;"><span style="font-family: "trebuchet ms" , sans-serif;"><a href="https://www.blogger.com/profile/15280938531215472534">May</a>.</span></span><br />
<div style="font-style: normal; font-weight: 400;">
<br /></div>
</div>
</div>
<div style="background-color: #1d1d1d; color: #9ba2a8; font-size: 15px; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<h2 style="font-family: roboto, sans-serif; font-style: normal;">
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">04 - Considerações sobre a Execução</span> </h2>
<span style="font-family: "trebuchet ms" , sans-serif;">A execução ocorre em segundo plano, ou seja, ele não abre nenhum terminal extra durante os testes, contudo todo o processamento poderá ser visualizado no terminal que está executando os testes e, também posteriormente no <i>log </i>do robot.</span><br />
<div style="font-style: normal;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div style="font-style: normal;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">E aí o que acharam???? O exemplo supracitado está disponível no meu </span><a href="https://github.com/filipesalvadorsilveira/testesrobotframework/blob/master/TestSecureShell.robot" style="background: rgb(29, 29, 29); color: #2196f3; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" target="_blank">GitHub</a><span style="background-color: #1d1d1d; color: #9ba2a8; display: inline; float: none; font-size: 15px; font-style: normal; font-weight: 400; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> ... Abraço robotizadores!!! </span><span class="QXzCSe"><span class="fJyiwb" id="tw-bil-st"><i>See you later</i>!</span></span></span> </div>
Filipe Salvador Silveirahttp://www.blogger.com/profile/12612849904366836323noreply@blogger.com3tag:blogger.com,1999:blog-264869294855361788.post-64428680469532820742019-09-13T10:17:00.003-07:002021-01-13T04:16:46.950-08:00Season WEB Testing - Ep. 02: Upload de Arquivos<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0HIkTbGBWehvdc1SNyielRo4NaN-DQac54yZvRMftn6QNrj0d90Av8LCftHRScRjwV7BI4gbw2cFO3kV6fGt4p7bDx5d9h584DjPI-depJJGduDXCXgrIGD_Xr6FFUiA5-F2JDjYCG4x0/s1600/if_Robot_11_385841.png" style="margin-left: 1em; margin-right: 1em;"><span face=""trebuchet ms" , sans-serif"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0HIkTbGBWehvdc1SNyielRo4NaN-DQac54yZvRMftn6QNrj0d90Av8LCftHRScRjwV7BI4gbw2cFO3kV6fGt4p7bDx5d9h584DjPI-depJJGduDXCXgrIGD_Xr6FFUiA5-F2JDjYCG4x0/s320/if_Robot_11_385841.png" width="320" /></span></a></div>
<span face=""trebuchet ms" , sans-serif"><br /></span><span face=""trebuchet ms" , sans-serif"><br /></span><span face=""trebuchet ms" , sans-serif">Oláááá Robotizadores!!!! Bora ver como fazer um upload de arquivo com o Robot Framework?? É "facin, facin", chega mais ...</span><br />
<span face=""trebuchet ms" , sans-serif"><br /></span><span face=""trebuchet ms" , sans-serif"><br /></span><span face=""trebuchet ms" , sans-serif"><br /></span><br />
<h2>
<span face=""trebuchet ms" , sans-serif" style="color: #ffd966;">Upload de Arquivo (WEB page)</span></h2>
<div>
<span face=""trebuchet ms" , sans-serif" style="color: #ffd966;"><br /></span></div>
<h3>
<span face=""trebuchet ms" , sans-serif" style="color: #ffd966;"><b>Library Selenium: Choose File</b></span></h3>
<span face=""trebuchet ms" , sans-serif">Para fazer um upload de arquivo em uma página web, vamos usar a <i>keyword</i> <a href="http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Choose%20File"><i>Choose File</i></a> da <a href="http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html"><i>SeleniumLibrary</i></a>. Ela "magicamente" acha o arquivo na máquina de execução e faz o upload no campo tipo arquivo [</span><span face=""trebuchet ms" , sans-serif"><i><b>type="file"</b></i></span><span face=""trebuchet ms" , sans-serif">].</span><br />
<span face=""trebuchet ms" , sans-serif"><br /></span>
<span face=""trebuchet ms" , sans-serif">Segue um exemplo que você pode executar aí!! OBS.: Obviamente mude ali o diretório para um arquivo que exista aí na sua máquina!!!</span><br />
<br />
<script src="https://gist.github.com/mayribeirofernandes/36e331066633eed0dc4d77197d2f6fa8.js"></script><br />
<div>
<span face=""trebuchet ms" , sans-serif">Nesse exemplo eu abro o site de testes que tem uma página para Upload, espero o botão estar visível e uso a <i><a href="http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Choose%20File">Choose File</a></i> para selecionar um arquivo que está no meu diretório C:\\projetos\\, aperto o botão de submeter e confiro se deu tudo certo!</span><br />
<span face=""trebuchet ms" , sans-serif"><br /></span>
<span face=""trebuchet ms" , sans-serif">Prontinho, seu arquivo foi carregado com sucesso!!!! Até a próxima robotizadores!!!</span></div>
Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com1tag:blogger.com,1999:blog-264869294855361788.post-57238992343757809422019-07-02T07:00:00.000-07:002019-07-02T07:00:19.745-07:00Season Libraries - Ep. 06 Library XML - Manipulação e Conferência de XMLs<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><span style="font-family: "trebuchet ms" , sans-serif;">Olááááá Robotizadores!!! Vamos falar de como ler, salvar, manipular e conferir XMLs!!! É uma biblioteca chatinha de entender, confesso, mas esse tutorial veio pra tirar várias dúvidas!!! Segue só...</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><b style="color: #a64d79;">#FICADICA: </b>Lembrando que é necessário que você já tenha uma noção sobre o Robot Framework!!! Se ainda não tem, dá uma olhadinha nos primeiros posts do blog!!!</span><br />
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">01 - A library XML</span></h2>
<div>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">A Library</span><span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"> <b>XML </b></span><span style="font-family: "trebuchet ms" , sans-serif;">é uma</span><span style="font-family: "trebuchet ms" , sans-serif;"> </span><i style="font-family: "trebuchet ms", sans-serif;">library</i><span style="font-family: "trebuchet ms" , sans-serif;"> </span><span style="font-family: "trebuchet ms" , sans-serif;">do tipo Standard, então você não precisará baixá-la e nem instalá-la, ela já vem com o Robot. Mas para utilizá-la nos seus testes você precisará instanciá-la:</span></div>
<div>
<br />
<code><span style="color: #93c47d;"><b>*** Settings **</b>*</span><br /><span style="color: #a64d79;">Library</span> <span style="color: #eeeeee;">XML</span></code></div>
<div>
<br /></div>
<div>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><span style="background-color: black; color: white; font-family: monospace;"><br /></span></span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Com ela você poderá ler elementos e atributos, criar, manipular e conferir XMLs. A <a href="http://robotframework.org/robotframework/latest/libraries/XML.html" target="_blank">documentação de </a><i><a href="http://robotframework.org/robotframework/latest/libraries/XML.html" target="_blank">keywords</a> </i>dela é bem completa, porém é COMPLEXA, recomendo leitura com CALMA e ATENÇÃO nos exemplos dados.</span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">02 - Exemplo de uso</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Trago aqui um código cheio de exemplos, claro que não tem todos e o XML é bem simples, mas vale a pena para entender o funcionamento dela:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Considere o XML base abaixo:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<script src="https://gist.github.com/mayribeirofernandes/29f0c718cce12636ed10198b7655e1f5.js"></script>
<span style="font-family: "trebuchet ms" , sans-serif;"><br />Veja o Resource com vários exemplos de manipulação e conferência:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<script src="https://gist.github.com/mayribeirofernandes/bacee397d1e8b1c3d8539bb41aebc480.js"></script>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Olhe como ficou o XML após a execução do Resource acima:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<script src="https://gist.github.com/mayribeirofernandes/c4e959b2ff38d1bb4b5348f0ea0e35b4.js"></script>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Para executar na sua máquina, baixe o projeto completo no meu GitHub:</span><br />
<br />
<a href="https://github.com/mayribeirofernandes/testesrobotframework/tree/master/ExemploLibraryXML" style="font-family: "trebuchet ms", sans-serif;">ExemploLibraryXML</a><br />
<br />
<span style="font-family: "trebuchet ms" , sans-serif;">Espero que tenha tirado muitas dúvidas sobre essa Library!!! Até a próxima Robotizadores!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
</div>
</div>
Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com2tag:blogger.com,1999:blog-264869294855361788.post-44183858097517391892019-01-31T02:50:00.001-08:002019-01-31T02:53:40.348-08:00Season Comunidade - Ep. 01: Test Girls Talks #11<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; margin-left: 1em; margin-right: 1em;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0HIkTbGBWehvdc1SNyielRo4NaN-DQac54yZvRMftn6QNrj0d90Av8LCftHRScRjwV7BI4gbw2cFO3kV6fGt4p7bDx5d9h584DjPI-depJJGduDXCXgrIGD_Xr6FFUiA5-F2JDjYCG4x0/s1600/if_Robot_11_385841.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0HIkTbGBWehvdc1SNyielRo4NaN-DQac54yZvRMftn6QNrj0d90Av8LCftHRScRjwV7BI4gbw2cFO3kV6fGt4p7bDx5d9h584DjPI-depJJGduDXCXgrIGD_Xr6FFUiA5-F2JDjYCG4x0/s320/if_Robot_11_385841.png" width="320" /></a></span></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<span style="font-family: "trebuchet ms" , sans-serif;">Olá robotizadores!!!! Com a Season Comunidade pretendo divulgar os eventos em que o Robot Framework foi divulgado!! Espero que seja uma forma de incentivar os profissionais de QA a sempre compartilhar conhecimento!!!</span></div>
<div class="separator" style="clear: both;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<br /></div>
<h2 style="clear: both;">
<span style="font-family: "trebuchet ms" , sans-serif;">Test Girls #11</span></h2>
<div class="separator" style="clear: both;">
<span style="font-family: "trebuchet ms" , sans-serif;">O figura <a href="https://www.linkedin.com/in/luanalinares/" target="_blank">Lu Linares</a>, que considero pakas, palestrou no <b><span style="color: #93c47d;"><a href="https://www.meetup.com/pt-BR/test-girls/" target="_blank">Test Girls</a> #11</span></b> em SP dia 29/01/2019. Muitas girls maravilhosas participaram e teve até sorteio do nosso <a href="https://www.udemy.com/automacao-de-testes-com-robot-framework-basico/?couponCode=FUTUROROBOTIZADOR" target="_blank">curso</a>!!! Parabéns maravilhosas!!!</span></div>
<div class="separator" style="clear: both;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNynD0bi-zOC2tknJGTQ_PR0EI_-vKzkOcOg4v4ZUd8KE8uhUsCogNKDhG71DBUJlQCRYd-gw08PrGRw-RsUs8oUGKxko2mzk9qXYbkwPPJpwxUkcgJHzsqAqXIqjPK5Bh1tDm18Rfyvfk/s1600/WhatsApp+Image+2019-01-30+at+10.50.11+%25282%2529.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="719" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNynD0bi-zOC2tknJGTQ_PR0EI_-vKzkOcOg4v4ZUd8KE8uhUsCogNKDhG71DBUJlQCRYd-gw08PrGRw-RsUs8oUGKxko2mzk9qXYbkwPPJpwxUkcgJHzsqAqXIqjPK5Bh1tDm18Rfyvfk/s320/WhatsApp+Image+2019-01-30+at+10.50.11+%25282%2529.jpeg" width="178" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOZ9H684kZBR47qjvx9feedIRe3OuQd0er-3VR9nDyOcZorxihtZo_vPG5O1xrZNaAkc8mDungjWInyfWRIaOfoyd8fVJx4FBFjN0tq8YadZbxwVi2-0-jhbse5ivkud91Z-4MQnUb2K6c/s1600/WhatsApp+Image+2019-01-30+at+10.50.10+%25281%2529.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="1280" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOZ9H684kZBR47qjvx9feedIRe3OuQd0er-3VR9nDyOcZorxihtZo_vPG5O1xrZNaAkc8mDungjWInyfWRIaOfoyd8fVJx4FBFjN0tq8YadZbxwVi2-0-jhbse5ivkud91Z-4MQnUb2K6c/s320/WhatsApp+Image+2019-01-30+at+10.50.10+%25281%2529.jpeg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV0zn1YZ4-Awb-F2dk67CF7uHDduwmvL4ANrOZ33_ubxf6QoKZcf1gkGLRBTlHVzYKDveV_3vLmmGTLiXhxvTdKkEcNBfs8KpQpJOcvv5DlWiqnpDxs7ND3So4xHKi-v8t3amwrwHJM3B6/s1600/WhatsApp+Image+2019-01-30+at+10.50.11+%25281%2529.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="960" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV0zn1YZ4-Awb-F2dk67CF7uHDduwmvL4ANrOZ33_ubxf6QoKZcf1gkGLRBTlHVzYKDveV_3vLmmGTLiXhxvTdKkEcNBfs8KpQpJOcvv5DlWiqnpDxs7ND3So4xHKi-v8t3amwrwHJM3B6/s320/WhatsApp+Image+2019-01-30+at+10.50.11+%25281%2529.jpeg" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1zgsNo2gItwmnWLzLQlvkd9ZodJrhXWV7w3M5Tm36awn1mEXg4F-FopD1diTuv4bHjdOIK-3Inzu0sroPt1XWDfLO-c7_663jbiBD9X7c1k3eVLnuvuky0aeE126LjAW3KRPkXfHsdqwb/s1600/WhatsApp+Image+2019-01-30+at+10.50.11.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1013" data-original-width="612" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1zgsNo2gItwmnWLzLQlvkd9ZodJrhXWV7w3M5Tm36awn1mEXg4F-FopD1diTuv4bHjdOIK-3Inzu0sroPt1XWDfLO-c7_663jbiBD9X7c1k3eVLnuvuky0aeE126LjAW3KRPkXfHsdqwb/s320/WhatsApp+Image+2019-01-30+at+10.50.11.jpeg" width="193" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7fD3LaBoKM-MAeGDbNSCiZKlS8qV_0lv3k46YvE2Ct-2k2y1yVl79qKJWorVjdONBIJuJwp5s4ipNtkuYOAxTXZXCwLvMMiwXMF20qUPKeHs-qSakS1YADgv1uNW380lbBxrg7Bpgl95B/s1600/WhatsApp+Image+2019-01-30+at+10.50.10.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7fD3LaBoKM-MAeGDbNSCiZKlS8qV_0lv3k46YvE2Ct-2k2y1yVl79qKJWorVjdONBIJuJwp5s4ipNtkuYOAxTXZXCwLvMMiwXMF20qUPKeHs-qSakS1YADgv1uNW380lbBxrg7Bpgl95B/s320/WhatsApp+Image+2019-01-30+at+10.50.10.jpeg" width="320" /></a></div>
<div class="separator" style="clear: both;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com0tag:blogger.com,1999:blog-264869294855361788.post-66805532228223353042019-01-16T10:04:00.000-08:002019-06-17T16:12:39.102-07:00Season Running - Ep. 08: Executando seus testes no Docker<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9F6p3w8D1qz6JuPfiPx-AG5qYm4v4ZbfZjEU-OqfIEsEyusNhpXV3C4As0K7Nbuze7jBIFKzOS7rvuUbRbLfiULnMxj7MCRTMNjVlAmxPxDbkEkmMiRzdfl5nqHMTQM0ORemw6Gvdc9jH/s1600/if_Robot_13_385843.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9F6p3w8D1qz6JuPfiPx-AG5qYm4v4ZbfZjEU-OqfIEsEyusNhpXV3C4As0K7Nbuze7jBIFKzOS7rvuUbRbLfiULnMxj7MCRTMNjVlAmxPxDbkEkmMiRzdfl5nqHMTQM0ORemw6Gvdc9jH/s1600/if_Robot_13_385843.png" /></a></div>
<br />
<span style="font-family: "trebuchet ms" , sans-serif;">Olááá robotizadores! Neste post vou mostrar um exemplo de como executar seus testes em um container Docker... Lembrando que esse post é mais avançado, exige que você já tenha um básico de Docker!!! Veja mais sobre ele e como instalá-lo aqui: <a href="https://blog.umbler.com/br/containers-102-primeiros-passos-para-realizar-a-instalacao/">https://blog.umbler.com/br/containers-102-primeiros-passos-para-realizar-a-instalacao/</a></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><span style="font-family: "trebuchet ms" , sans-serif;"></span>
<br />
<h2>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;">Introdução Básica</span></h2>
<span style="font-family: "trebuchet ms" , sans-serif;">Para quem não conhece o Docker ainda, aqui vai uma rápida introdução. O Docker disponibiliza <b><i>containers</i></b>, que são mais simples que VM's para se trabalhar com virtualização de ambientes. Cada <i><b>container </b></i>é como se fosse uma máquina, onde você instala o S.O. e os aplicativos que precisa para rodar uma aplicação ou várias aplicações, conforme a sua necessidade. No nosso caso, vamos criar uma <b>imagem </b>que tenha Linux + Python 3 + Robot Framework + Libraries do Robot e, via linha de comando Docker, criar um <i><b>container </b></i>a partir dessa <b>imagem </b>e então rodar nosso teste nele, depois ele "morrerá". Ou seja, você não precisa do Python + Linux + blablabla instalados na sua máquina física, apenas o DOCKER!!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Veja mais detalhadamente aqui: <a href="https://blog.umbler.com/br/containers-101-como-essa-tecnologia-pode-alavancar-suas-aplicacoes/">https://blog.umbler.com/br/containers-101-como-essa-tecnologia-pode-alavancar-suas-aplicacoes/</a></span><br />
<h2>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;"><br /></span></h2>
<h2>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;">Passo 01: Escrevendo nosso script da imagem (<i>Dockerfile</i>)</span></h2>
<span style="font-family: "trebuchet ms" , sans-serif;">O script que cria a imagem Docker se chama <b><i>Dockerfile</i></b>, sem extensões no nome. Eu criei uma pastinha chamada "r<i>unner</i>" dentro do meu projeto de testes e criei o arquivo assim:</span><br />
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<script src="https://gist.github.com/mayribeirofernandes/98662134d8623061010f0e1b09df828b.js"></script><br />
<span style="font-family: "trebuchet ms" , sans-serif;">No script acima eu deixei os passos comentados e explicados já, mas resumindo, nessa imagem fizemos:</span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><b>Passo 01:</b> Instanciamos o S.O. (linux)</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><b>Passo 02:</b> Criamos volumes (são diretórios dentro do <i><b>container </b></i>que poderão ser visualizados da sua máquina física após um mapeamento)</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><b>Passo 03:</b> Com os comandos do S.O. escolhido, fazemos a instalação do Python 3</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><b>Passo 04:</b> Através do <i>pip</i>, instalamos o que era necessário para o RobotFramework executar nossos testes.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;">Passo 02: Construindo uma imagem a partir de um Dockerfile ("<i>buildando</i>")</span></h2>
<span style="font-family: "trebuchet ms" , sans-serif;">Agora, via linha de comando, vamos construir nossa imagem. Dentro do projeto, digite o comando no formato abaixo e passe no último argumento o local do seu Dockerfile:</span><br />
<h3>
<span style="font-family: "trebuchet ms" , sans-serif;"><b><i style="background-color: black;"><span style="color: white;">docker build </span><span style="color: #93c47d;">-t nome_da_sua_imagem</span> <span style="color: #9fc5e8;">./diretorio/do/seu/dockerfile</span></i></b></span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">Exemplo:</span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2mA14I7n4Q1NdI50mAhQGFjelJtk2sxqZ_6OachvvDoVPlJLPuBfNo9YzB0I6gV4ygALKLu20odzUBkBIsJH41vMe5MLoAdv_9diBJW6H6KeqUss5DypFx8DlvmC7WbBBLtZN1SEXw_dM/s1600/comando_build.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="329" data-original-width="730" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2mA14I7n4Q1NdI50mAhQGFjelJtk2sxqZ_6OachvvDoVPlJLPuBfNo9YzB0I6gV4ygALKLu20odzUBkBIsJH41vMe5MLoAdv_9diBJW6H6KeqUss5DypFx8DlvmC7WbBBLtZN1SEXw_dM/s1600/comando_build.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "trebuchet ms" , sans-serif;">Exemplo do comando <docker build></span></td></tr>
</tbody></table>
<br />
<span style="font-family: "trebuchet ms" , sans-serif;">Se for a primeira vez que você está construindo essa imagem, ele irá baixar a imagem do S.O. e talvez demore um pouquinho, aguarde até finalizar!!! Após finalizar confira se aparece <b><i>Successfully built</i></b>, como no exemplo abaixo:</span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgh5YRyr8JbJVgTd4o_N0WclZC4MOitIOyS7nqWzWiwnXAHTzAvWKGVcPuday8z4oA0tUXOJO0_pgk4sClz5pZJWndgrMNhJsNLvIQp-bwsxdiL8JzLaT2VAIJtc1nHEygu3oSANFl-tcu/s1600/build_success.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="408" data-original-width="501" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgh5YRyr8JbJVgTd4o_N0WclZC4MOitIOyS7nqWzWiwnXAHTzAvWKGVcPuday8z4oA0tUXOJO0_pgk4sClz5pZJWndgrMNhJsNLvIQp-bwsxdiL8JzLaT2VAIJtc1nHEygu3oSANFl-tcu/s1600/build_success.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "trebuchet ms" , sans-serif;">Resultado do comando <docker build> da nossa imagem</span></td></tr>
</tbody></table>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Se você digitar o comando: </span><br />
<h3>
<span style="font-family: "trebuchet ms" , sans-serif;"><b><i style="background-color: black;"><span style="color: white;">docker images</span></i></b></span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">Verá as imagens já construídas ou baixadas no seu Docker.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><b>#FICAADICA:</b> a coluna <b><i>TAG </i></b>identifica a versão da sua imagem.</span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtfnMO48fTvkNhC-fRgzrkKr-KqZoCm-tY9BrWlb3mNMvC0yjSHa7kn6emd3TjKwzpsIFR5IAa5qMx1OMkA8hq3ztlcMFJIh7pVn0ZkfqFa_8px7avRnik5Mw2B9ijG8GoWKBzaxpCFjVf/s1600/docker_images.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="90" data-original-width="950" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtfnMO48fTvkNhC-fRgzrkKr-KqZoCm-tY9BrWlb3mNMvC0yjSHa7kn6emd3TjKwzpsIFR5IAa5qMx1OMkA8hq3ztlcMFJIh7pVn0ZkfqFa_8px7avRnik5Mw2B9ijG8GoWKBzaxpCFjVf/s1600/docker_images.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "trebuchet ms" , sans-serif;">Resultado do comando <docker images> após construir nossa imagem</span></td></tr>
</tbody></table>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Prontinho, nossa imagem está construída, bora rodar ela e executar nossos testes???</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;">Passo 03: Executando o Robot Framework via Docker com a nossa imagem</span></h2>
<span style="font-family: "trebuchet ms" , sans-serif;">Agora o comando ficará grandão, deverá seguir o formato:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"></span>
<br />
<h3>
<span style="font-family: "trebuchet ms" , sans-serif;"><i style="background-color: black;"><span style="color: white; font-weight: bold;">docker run </span><span style="color: orange; font-weight: bold;">--rm</span><span style="color: white; font-weight: bold;"> </span><span style="color: red; font-weight: bold;">--name execucao_robot</span><span style="color: white; font-weight: bold;"> </span><span style="color: yellow; font-weight: bold;">-v "</span><span style="color: yellow;">diretorio_local":diretorio_container</span><span style="color: #9fc5e8;"> </span><span style="color: #8e7cc3; font-weight: bold;">nome_da_imagem:TAG</span><span style="color: #9fc5e8; font-weight: bold;"> </span><span style="color: #6aa84f; font-weight: bold;">comando que executará os testes do robot</span></i></span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">O comando acima <b><i>roda </i></b>o <i>container (<b>docker run</b>)</i>, utilizando a imagem na versão que quero (<b><i>nome_da_imagem:TAG</i></b></span><span style="font-family: "trebuchet ms" , sans-serif;">), mapeando os volumes necessários entre minha máquina e o <i>container (<b>-v "diretorio_local":diretorio_container</b>),</i> executa o comando que passo no final<i> (</i></span><span style="font-family: "trebuchet ms" , sans-serif;"><i><b>comando que executará os testes do robot</b></i></span><span style="font-family: "trebuchet ms" , sans-serif;"><i>) </i>e, após finalizar, ele remove ("mata") esse <i>container </i>automaticamente </span><i style="font-family: "trebuchet ms", sans-serif;">(<b>--rm</b>).</i><br />
<i style="font-family: "trebuchet ms", sans-serif;"><br /></i>
<span style="font-family: "trebuchet ms" , sans-serif;">Fica mais claro com o exemplo abaixo, veja:</span><br />
<h3>
<i><span style="background-color: black; font-family: "trebuchet ms" , sans-serif;"><span style="color: white;">docker run </span><span style="color: orange;">--rm</span><span style="color: white;"> </span><span style="color: red;">--name execucao_robot</span><span style="color: white;"> </span><span style="color: yellow;">-v "C:\RobotBlog\ExemploDocker\suites":/opt/robotframework/tests -v "C:\RobotBlog\ExemploDocker\results":/opt/robo</span></span><span style="background-color: black; color: yellow; font-family: "trebuchet ms" , sans-serif;">tframework/results</span><span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;"> </span><span style="background-color: black; color: #8e7cc3; font-family: "trebuchet ms" , sans-serif;">robot_runner:latest</span><span style="background-color: black; color: white; font-family: "trebuchet ms" , sans-serif;"> </span><span style="background-color: black; color: #6aa84f; font-family: "trebuchet ms" , sans-serif;">robot -d /opt/robotframework/results -N "Minha suíte executada no docker!" /opt/robotframework/tests</span></i></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">- O argumento amarelo é onde mapeio meus diretórios locais x diretórios do container</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">- Chamo nossa imagem na versão <i>latest</i> no argumento roxo</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">- E informo o comando que quero que ele execute <u>DENTRO </u>do container, por isso passo o diretório dos testes de <u>DENTRO </u>do <i>container</i>, veja!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjezmJWaZdIoWb5qn7VZ_6OXlsA3kZnGDDQYAQxVgF2mI8vLH7emRD9u8J1mZ7jCNICPLLPU5TLRKFpWo0HjzE_qbKJX_Cj7zGUYcWEFTsmqE-OVfONrKzokXfT5v76bmbUP4GQXhpBePsj/s1600/exemplo_execucao.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="374" data-original-width="1026" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjezmJWaZdIoWb5qn7VZ_6OXlsA3kZnGDDQYAQxVgF2mI8vLH7emRD9u8J1mZ7jCNICPLLPU5TLRKFpWo0HjzE_qbKJX_Cj7zGUYcWEFTsmqE-OVfONrKzokXfT5v76bmbUP4GQXhpBePsj/s1600/exemplo_execucao.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "trebuchet ms" , sans-serif;">Resultado do comando <docker run> na nossa imagem, onde foi executado um comando do Robot Framework</span></td></tr>
</tbody></table>
<span style="font-family: "trebuchet ms" , sans-serif;"><b><br /></b></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><b>#FICAADICA:</b> Como você mapeou os <b><i>diretórios locais x container</i></b>, então na sua pasta local (exemplo: <b>C:\RobotBlog\ExemploDocker\results</b>) também estarão os <b><i>outputs </i></b>do teste!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><span style="font-family: "trebuchet ms" , sans-serif;">E aí??? Curtiu?? Usar Docker facilita a execução de testes em ambientes na nuvem e CI, algumas empresas tem repositórios de imagens Docker, você pode escrever uma imagem e ela pode ser disponibilizada para outras pessoas, muito útil e facilita nossa vida!!!</span><br />
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;">Extra: Use imagens públicas!!!</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Siiim, a galera cria imagens genéricas e disponibilizam no <a href="https://hub.docker.com/" target="_blank">Docker Hub</a>, a imagem do FEDORA utilizada no nosso exemplo é uma imagem pública!! Veja que ela foi baixada durante o build.</span><br />
<br />
<span style="font-family: "trebuchet ms" , sans-serif;">Se você preferir busque imagens prontas que te sirvam, inclusive deixo aqui a dica de uma imagem para o Robot Framework executar testes WEB, essa imagem já tem tudo instalado, até os drivers dos navegadores, e os testes não utilizam o SEU navegador, isso mesmo, os testes são executados DENTRO do container, assim seu browser fica livre aí para você usar!!! Leia atentamente as instruções do criador (aba Overview) e tente usar para seus testes WEB!!! Segue link: <a href="https://hub.docker.com/r/ppodgorsek/robot-framework/dockerfile">https://hub.docker.com/r/ppodgorsek/robot-framework/dockerfile</a></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Até mais robotizadores dockerzeiros!!!!</span></div>
Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com0tag:blogger.com,1999:blog-264869294855361788.post-40034964759192947752018-09-19T09:16:00.000-07:002019-06-17T16:11:46.407-07:00Season Tutoriais - Ep. 06: Como fazer loops<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixtr4tYr816e5ntYAwpoxirwc6CVY2_jVar-AT6tEl1LxfUlVLxlB9QmyM9gZa778FGIxK160Ol76ASWy31hkSCp6TPEpTOnZaFnTQ0obBl76CmRuaZgf-18WW9ceRFuNJH3sMQX2cAb0U/s1600/if_Robot_13_385843.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixtr4tYr816e5ntYAwpoxirwc6CVY2_jVar-AT6tEl1LxfUlVLxlB9QmyM9gZa778FGIxK160Ol76ASWy31hkSCp6TPEpTOnZaFnTQ0obBl76CmRuaZgf-18WW9ceRFuNJH3sMQX2cAb0U/s1600/if_Robot_13_385843.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><span style="font-family: "trebuchet ms" , sans-serif;">Olááááá Robotizadores … tudo bem? Eu sou a Paola Machado e vou ajudar a May Fernandes a produzir mais conteúdos aqui no blog para vocês. Nesse post-tutorial vamos falar sobre os <b><i>loops</i> </b>e as diferentes formas de trabalhar com ele no Robot. As <i>keywords</i> do <i>loop</i> não estão em nenhuma <i>library</i> então, se tu ainda não é parceiro(a) do </span><a href="http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#templates-with-for-loops" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">UserGuide</span></a><span style="font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">.</span><span style="font-family: "trebuchet ms" , sans-serif;"> pode ser que seja um pouco difícil de achar. Então bora começar... </span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
</span><br />
<h3>
<b><span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;">1 - Instalação da library</span></b></h3>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;">Não é necessário instalar nenhuma <i>library </i>para utilizar as </span><i>keywords</i><span style="font-family: "trebuchet ms" , sans-serif;"> de loop, pois esses recursos são da biblioteca padrão do RobotFramework, a <a href="http://robotframework.org/robotframework/latest/libraries/BuiltIn.html" style="font-size: 14.6667px; font-style: italic; white-space: pre;"><b>BuiltIn</b></a>.</span></span><br />
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<h3>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;">2 - <i>Loops </i>com FOR</span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">A sintaxe começa com<span style="color: #6aa84f;"> <b>:FOR</b></span> e os dois pontos são necessários para separar a sintaxe das <i>keywords</i> normais, a próxima informação é a variável de "incremento" do <i>loop</i>, e a próxima informação deve ser a palavra <b><span style="color: #6aa84f;">IN</span> </b>(para listas)<b> </b>ou<b> <span style="color: #6aa84f;">IN RANGE</span> </b>(para intervalo numérico), por fim são passados os números de início e fim que deseja iterar ou a lista que será percorrida.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;"><b><br /></b></span>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;"><b>2.1 - <i>Loop </i>em uma lista de elementos:</b></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;"><b><br /></b></span>
<img height="88" src="https://lh3.googleusercontent.com/11P6PWtD8sdP9iz44O-b8oCX3vfEbNbDsE_PRvFqOwte6JofbMM8PrT7baPGUa163tlb2BdfB7LlSnC3k-Ag4cR1aG05laX1ybGIBRfZLVg3lV7MkalkQprRt8M8siMkZrfyGiXl" style="border: none; font-size: 11pt; transform: rotate(0rad); white-space: pre-wrap;" width="591" /></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">Nesse exemplo tenho uma lista de frutas (<b>@{FRUTAS}</b>) e para cada item dessa lista uma interação é executada, o FOR acaba quando todos os itens (<b>${ITEM}</b>) da lista tiverem sido percorridos.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;"><b><br /></b></span>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;"><b>2.2 - <i>Loop </i>em um intervalo de números:</b></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><b><br /></b></span>
<span id="docs-internal-guid-2c542889-7fff-16ac-f0ed-14477d5be75c"><span style="font-family: "trebuchet ms" , sans-serif; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;"><img height="84" src="https://lh6.googleusercontent.com/xXFR3i3cY9p_Y41x0XwaWHrTq1_IJlz_XqQSedfoR9SKkGhsJBkL7Uu6pwudtJkyOasGq9J5LGX3PTgAvjo8cgZRIUbxsrEdHZiRAKdLVgjnmrOTa5VcPqf69rAnPVuozu3tFmtq" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="592" /></span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">Nesse exemplo tenho um intervalo de 1 a 6, ou seja, o contador (<b>${COUNT}</b>) irá ser incrementado a cada execução até que as 5 interações acabem. No robot o último número não é contabilizado como uma interação, ou seja, a interação nº 6 não irá ocorrer.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h3>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;">3 - Repetindo uma única <i>keyword</i> várias vezes</span></h3>
<span style="font-family: "trebuchet ms" , sans-serif;">O último <i>loop </i>é um pouco diferente, todas as ações são colocadas em uma <i>keyword </i>e nós repetimos essa <i>keyword </i>em um determinado nº de vezes. Obs.: N</span><span style="font-family: "trebuchet ms" , sans-serif;">ão é possível interromper o <i>loop </i>antes que todas as iterações tenham sido concluídas.</span><span style="font-family: "trebuchet ms" , sans-serif;"> </span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><b>#DICA</b>: Essa <i>keyword </i>está descrita na library </span><b style="font-family: "trebuchet ms", sans-serif; font-size: 14.6667px; font-style: italic; white-space: pre;"><a href="http://robotframework.org/robotframework/latest/libraries/BuiltIn.html" style="text-decoration-line: none;">BuiltIn</a></b><span style="font-family: "trebuchet ms" , sans-serif;">.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "trebuchet ms" , sans-serif; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"><img height="68" src="https://lh6.googleusercontent.com/jWX1cyEwnChiRI2_belZ3wweETi6FZfLiAoEmJmoStt4dDhDyp43DWwTr9h2i3KSfVlpipsPaaFHhOSdU7Roe9pfDdPVMLiTWKlvRI34LVbUfjEO4b2pXu5nnW_gddiFX-o0ZGk7" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="591" /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "trebuchet ms" , sans-serif;">Nesse exemplo a <i>keyword </i>que eu quero que se repita 4 vezes é a </span><span style="font-family: "trebuchet ms" , sans-serif;">"</span><b style="font-family: "Trebuchet MS", sans-serif;">Log Vamos logar essa frase 4 vezes!!!</b><span style="font-family: "trebuchet ms" , sans-serif;">"</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "trebuchet ms" , sans-serif; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"></span></div>
<h3>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;"><br /></span></h3>
<h3>
<span style="color: #6aa84f; font-family: "trebuchet ms" , sans-serif;">4 - Keywords complementares</span></h3>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Temos mais 2 <i>keywords</i> para auxiliar na implementação com os <i>loops:</i></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><b><br /></b></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><b><span style="color: #6aa84f;">Exit For Loop</span> </b>e<b> <span style="color: #6aa84f;">Exit For Loop If</span></b></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;">Elas </span><span style="font-family: "trebuchet ms" , sans-serif;">fazem com que a execução do <i>loop</i> seja interrompido se a condição for verdadeira.</span></span></div>
<div>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 11pt; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;"><b>#DICA</b></span><span style="font-size: 11pt; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">:</span><span style="font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="font-size: 11pt; vertical-align: baseline; white-space: pre;">Essas </span><span style="font-size: 11pt; font-style: italic; vertical-align: baseline; white-space: pre;">keywords </span><span style="font-size: 11pt; vertical-align: baseline; white-space: pre;">também estão</span><span style="font-size: 11pt; vertical-align: baseline; white-space: pre;"> descritas na library</span><span style="font-size: 11pt; font-style: italic; vertical-align: baseline; white-space: pre;"> </span><span style="font-size: 11pt; font-style: italic; vertical-align: baseline; white-space: pre;"><b><a href="http://robotframework.org/robotframework/latest/libraries/BuiltIn.html" style="text-decoration-line: none;">BuiltIn</a>.</b></span></span><br />
<span style="color: #1155cc; font-family: "trebuchet ms" , sans-serif; font-size: 11pt; font-style: italic; vertical-align: baseline; white-space: pre;"><b><br /></b></span></div>
<div>
<span id="docs-internal-guid-7d634bd7-7fff-67bf-f349-b9fc5b4dba97"><span style="font-family: "trebuchet ms" , sans-serif; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;"><img height="84" src="https://lh5.googleusercontent.com/1kNG94yB-QoyJwHrD8Ew_5fGrUswh4SCLOuWf_vODAxZp6fSBV9rNQMr43vr0kIDFSHrEFVbGKhIs2pcCHclOYy0P6YaWIHVL-oNbA1Fyh9MZeP3Kr1M8HPNYVNBesgYLyveVzBU" style="border: none; transform: rotate(0rad);" width="602" /></span></span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><span id="docs-internal-guid-b70f5962-7fff-3472-38d5-3d01d816ece5"></span><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Veja o código completo dos exemplos acima:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<script src="https://gist.github.com/mayribeirofernandes/758b6e2f12a9545e81f5e4884d9e1afa.js"></script>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Em caso de dúvidas é possível encontrar a documentação detalhada no </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; vertical-align: baseline; white-space: pre;"><a href="http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#templates-with-for-loops" style="text-decoration: none;">UserGuide</a> </span><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; vertical-align: baseline; white-space: pre;">do Robot!!!!</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="background-color: transparent; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; vertical-align: baseline; white-space: pre;">Até mais robotizadores!!!!</span></span></div>
<b><span style="font-family: "arial"; font-size: 11pt; white-space: pre-wrap;"><br /></span></b>
Unknownnoreply@blogger.com9tag:blogger.com,1999:blog-264869294855361788.post-79550537788555715972018-09-13T10:08:00.001-07:002020-02-05T09:46:43.613-08:00Season Libraries - Ep. 05 Library AutoIt - Automação Desktop<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><span style="font-family: "trebuchet ms" , sans-serif;">Olááááá Robotizadores!!! O post da vez é sobre automação de aplicativos Desktop com a dupla Robot + <b><i>Library AutoIt</i></b>, para quem ainda não o conhece dá uma olhadinha no site do <a href="https://www.autoitscript.com/site/" style="font-weight: bold;" target="_blank">AutoIt</a><b> </b>e no projeto <a href="https://github.com/lucyking/robotframework-autoitlibrary" target="_blank"><b>AutoIt Library</b></a> para Robot! Bora robotizar esses desktops também??? Só vem...</span></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><b style="color: #a64d79;">#FICADICA: </b>Lembrando que é necessário que você já tenha uma noção sobre o Robot Framework!!! Se ainda não tem, dá uma olhadinha nos primeiros posts do blog!!!</span><br />
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">01 - Instalação da library <i>AutoItLibrary</i></span></h2>
<span style="font-family: "trebuchet ms" , sans-serif;">Com o seu terminal em modo administrador, execute:</span><br />
<div>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><i><br /></i></span></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><code><span style="background-color: black;"><span style="color: white;">pip install -U robotframework-autoitlibrary --no-cache-dir --pre</span></span><code></code></code></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><code><span style="background-color: black;"><span style="color: white; font-family: "trebuchet ms" , sans-serif;"><br /></span></span></code><span style="font-family: "trebuchet ms" , sans-serif;"><code></code></span></span>
<br />
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">02 - Captura dos elementos/controles (Controls)</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Ao instalar o <b>AutoIt</b>, um diretório é criado, provavelmente (C:\RobotFramework\Extensions\AutoItLibrary).</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Nele temos a documentação das keywords (<b>AutoItLibrary.html</b>), a documentação do próprio AutoIt (<b>AutoItX.chm</b>) e o aplicativo de mapeamento de objetos (<b>Au3Info.exe</b>).</span><br />
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNFlLVvOSfIiTcZcRuYy0OuKEzsSrO93GKhShNIYDRCJX7Rki1d8vveniyv1pcqO0kt-QTA9tOJ6qnSaschF4tfC6Auu4Atxn8RrMWxpas12BNTr5fYTMW0mVQyomYZ5GXiGycfGv1po84/s1600/diretorio.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="291" data-original-width="518" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNFlLVvOSfIiTcZcRuYy0OuKEzsSrO93GKhShNIYDRCJX7Rki1d8vveniyv1pcqO0kt-QTA9tOJ6qnSaschF4tfC6Auu4Atxn8RrMWxpas12BNTr5fYTMW0mVQyomYZ5GXiGycfGv1po84/s1600/diretorio.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "trebuchet ms" , sans-serif;">Diretório criado pela instalação do AutoItLibrary</span></td></tr>
</tbody></table>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Você usará o </span><b style="font-family: "trebuchet ms", sans-serif;">Au3Info.exe </b><span style="font-family: "trebuchet ms" , sans-serif;">para capturar os dados dos controles/elementos que quer interagir. No vídeo abaixo mostrarei como fazer!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<div>
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">03 - Escreva seu código no Robot Framework</span></h2>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Segue meu exemplo... Usei um aplicativo meu, que fiz em Delphi, chamado <b>SEALsScript.exe</b> bem simples apenas para exemplificar. O .exe se encontra no meu <a href="https://github.com/mayribeirofernandes/testesrobotframework/tree/master/ExemploAutoIt" target="_blank">GitHub</a> se quiserem utilizá-lo.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Abaixo o código como fica, mas os detalhes serão explicados no vídeo!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<script src="https://gist.github.com/mayribeirofernandes/4c02c7f16af4e7be0475ad9785d36c37.js"></script>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="font-family: "trebuchet ms" , sans-serif;"><span style="font-family: "trebuchet ms" , sans-serif;"><span style="color: #a64d79;">04 - Montando o script do teste</span></span></span></h2>
</div>
<div>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">Segue vídeo mostrando passo-a-passo:</span></div>
<div>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='800' height='600' src='https://www.blogger.com/video.g?token=AD6v5dzExMlnrUA1_Y_ERnClH27iF8wh1aFqsZf-mFWnpn2f6uorHYwkGehsze8CnPF-iHelbwVh0xrdfScsYdYKTQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<div>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<br /></div>
<div>
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">05 - Dicas</span></h2>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">01 - Dependendo do software que você irá automatizar, muitos controles/elementos são customizados e não reconhecidos pelo AutoIt, isso é muuuito comum no mundo da automação Desktop, mas como o Robot é um framework genérico, ele permite utilizarmos quantas libraries quisermos, certo? Então, se algum elemento na tela não foi encontrado, utilize a library <a href="https://robotizandotestes.blogspot.com/2018/02/season-libraries-ep-02-library-sikuli.html" target="_blank">Sikuli</a> para interagir com esse elemento via reconhecimento de imagem!!!!</span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">02 - Talvez o uso de <a href="http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Sleep" target="_blank">Sleeps</a> seja necessário para que dê tempo do seu software carregar a tela desejada, use Sleeps em conjunto com os Waits do AutoIt para esperar as telas serem carregadas e então interagir com os elementos.</span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">03 - Use de preferência uma máquina virtual: testes Desktop tendem a ser muito lentos e não pode ter movimentos na tela, então para você não ficar "preso" sem poder mexer na sua máquina, faça esse tipo de teste numa máquina virtual!!!</span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">04 - Automação Desktop deve ser muuuitoo bem pensada e planejada, principalmente em sistemas legados!! Falhas de não reconhecimento de elementos e lentidão na execução são os vilões da parada, opte por um plano de testes bem específico, exemplo: testes de regressão muito críticos, bugs recorrentes, bateria de testes de homologação, etc. Não é aconselhado automatizar TUDO!! Organize seus testes e sua infraestrutura para execuções paralelas e builds noturnos (para quem trabalha com CI).</span></div>
<div>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<span style="font-family: "trebuchet ms" , sans-serif;">E aí gostaram???? O exemplo está disponível no meu <a href="https://github.com/mayribeirofernandes/testesrobotframework/tree/master/ExemploAutoIt" target="_blank">GitHub</a> ... Abraço robotizadores!!! Até a próxima...</span></div>
Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com12tag:blogger.com,1999:blog-264869294855361788.post-40553786958773460042018-06-05T05:15:00.001-07:002018-06-05T05:31:36.277-07:00Season Running - Ep. 06: Exportando seu log para Excel<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4e9-iRV0tw3anL5EdlAz-gN-v3ZrqMkusvrmGdrho-pK3YpXTCx1jRZetTN2SuYsqW_68w52i4uBlpP1Ki73GtxmPhBq5RaFjk4yyOoWbHc9mIuuRCQ8WgHlR5DR4HZNNANr8uW64Ydp2/s1600/if_Robot_17_385847.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4e9-iRV0tw3anL5EdlAz-gN-v3ZrqMkusvrmGdrho-pK3YpXTCx1jRZetTN2SuYsqW_68w52i4uBlpP1Ki73GtxmPhBq5RaFjk4yyOoWbHc9mIuuRCQ8WgHlR5DR4HZNNANr8uW64Ydp2/s1600/if_Robot_17_385847.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Olááá Robotizadores!!! Esse post veio de uma dúvida de um futuro robotizador do <a href="https://www.udemy.com/automacao-de-testes-com-robot-framework-basico/?couponCode=FUTUROROBOTIZADOR" target="_blank">Curso Automação de Testes com Robot Framework</a>!!! Siiim, a comunidade está crescendo!!! Ele gostaria de saber como exportar os resultados do <b><i>log.html</i></b> para <b>excel</b>, vamos ver como faz? Chega mais...</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Esse post foi baseado na solução encontrada no <a href="https://github.com/jsonpanganiban/robotframework-result-extractor" target="_blank">GitHub</a>, testei aqui e funcionou, então vamos aos passos:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="color: red; font-family: "trebuchet ms" , sans-serif;"><b>OBS.: O script do GitHub acima funcionou apenas no Python 2.7!!!! Então alterei ele para manter compatível com ambas as versões, está no meu <a href="https://github.com/mayribeirofernandes/robotframework-result-extractor/blob/master/result_extractor_excel.py" target="_blank">GitHub</a>!</b></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">01 - Instale os pacotes abaixo:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="color: white; font-family: "trebuchet ms" , sans-serif;"><code style="background-color: black;">pip install openpyxl</code></span><br />
<span style="color: white; font-family: "trebuchet ms" , sans-serif;"><code style="background-color: black;">pip install lxml</code></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">02 - Baixe o arquivo <b><i style="background-color: black;"><span style="color: white;">result_extractor_excel.py</span></i></b> do <a href="https://github.com/jsonpanganiban/robotframework-result-extractor" target="_blank">GitHub</a> que citei.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">03 - Coloque o arquivo no mesmo diretório em que estão sendo salvos os seus <b><i style="background-color: black;"><span style="color: white;">outputs</span></i></b> da execução.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">04 - Após executar os testes, rode o comando dentro do diretório dos <b><i style="background-color: black;"><span style="color: white;">outputs</span></i></b>:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="color: white; font-family: "trebuchet ms" , sans-serif;"><code style="background-color: black;">python result_extractor_excel.py</code></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">05 - Confira o .xls gerado no diretório, ele contém as colunas [<b>TEST CASE - STATUS - ERROR DETAILS - TAGS - COMMENTS</b>]</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">E aí? Funcionou??? Deixe as dúvidas nos comentários!!! Até mais robotizadores!!!!</span>Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com0tag:blogger.com,1999:blog-264869294855361788.post-5111714757671133372018-05-24T05:05:00.000-07:002018-05-24T05:06:17.945-07:00Season QA - Ep. 02: Carreira em Teste de Software! Por onde começo?<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "trebuchet ms" , sans-serif; margin-left: 1em; margin-right: 1em;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0HIkTbGBWehvdc1SNyielRo4NaN-DQac54yZvRMftn6QNrj0d90Av8LCftHRScRjwV7BI4gbw2cFO3kV6fGt4p7bDx5d9h584DjPI-depJJGduDXCXgrIGD_Xr6FFUiA5-F2JDjYCG4x0/s1600/if_Robot_11_385841.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0HIkTbGBWehvdc1SNyielRo4NaN-DQac54yZvRMftn6QNrj0d90Av8LCftHRScRjwV7BI4gbw2cFO3kV6fGt4p7bDx5d9h584DjPI-depJJGduDXCXgrIGD_Xr6FFUiA5-F2JDjYCG4x0/s320/if_Robot_11_385841.png" width="320" /></a></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">Olá robotizadores!!!! Muitas pessoas já me procuraram para perguntar e pedir dicas sobre como entrar na área de teste de software. Eu não sou consultora, mas já passei por isso e tenho algumas dicas que deram certo para mim e podem dar certo para você! Dividirei as dicas em etapas, etapas essas que considero importantes e foram essenciais para eu chegar onde estou hoje.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h2 style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">Etapas:</span></h2>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">1 — <a href="https://medium.com/@mayfernandes/s%C3%A9rie-carreira-em-teste-de-software-5c1e95a052de" target="_blank">As Certificações podem te ajudar!</a></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">2 — <a href="https://medium.com/@mayfernandes/s%C3%A9rie-carreira-em-teste-de-software-por-onde-come%C3%A7o-ep-02-cursos-e-leituras-de2df36bb6d6" target="_blank">Cursos e Leituras</a></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">3 —<a href="https://medium.com/@mayfernandes/s%C3%A9rie-carreira-em-teste-de-software-942a2e8bcc4" target="_blank"> Saiba sobre Teste Tradicional x Teste Ágil</a></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">4 — <a href="https://medium.com/@mayfernandes/s%C3%A9rie-carreira-em-teste-de-software-por-onde-come%C3%A7o-ep-04-tentando-uma-vaga-no-mercado-508c2576e316" target="_blank">Tentando uma vaga no mercado</a></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">5 —<a href="https://medium.com/@mayfernandes/s%C3%A9rie-carreira-em-teste-de-software-por-onde-come%C3%A7o-ep-05-eventos-e-comunidade-2d2a4aa0b424" target="_blank"> Eventos e Comunidade</a></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">Se você seguir essas dicas, você já estará bem apto a encarar um cargo inicial na área de teste de software. Claro que cada caso é um caso, nem todas as dicas podem ser úteis para você ou serem cruciais, absorva o que lhe parecer mais importante.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "trebuchet ms" , sans-serif;">Essas dicas são iniciais, existem muito mais coisas a se aprender e desenvolver que vão além do que vou falar nessa série. Eu mesma ainda estou me desenvolvendo e estou adquirindo conhecimentos avançados, por isso vou focar apenas nessas dicas iniciais baseadas no que vivi!</span></div>
Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com0tag:blogger.com,1999:blog-264869294855361788.post-72213034721452014742018-05-22T09:39:00.000-07:002019-07-02T06:42:02.710-07:00Season Libraries - Ep. 04: Library DateTime - Manipulação de Data e Hora<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" /></a></div>
<br />
<span style="font-family: "trebuchet ms" , sans-serif;">Olááá Robotizadores pontuais deste blog!!! Hoje vamos falar de uma <i>library</i> utilitária, sim uma <i>library</i> que disponibiliza recursos que podem ser muito úteis nos testes de qualquer sistema. A primeira <i>library</i> utilitária que vamos falar é a <a href="http://robotframework.org/robotframework/latest/libraries/DateTime.html" target="_blank"><b>DateTime</b></a>, para manipularmos datas e hora no Robot!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">
01 - A library DateTime</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">A <a href="http://robotframework.org/robotframework/latest/libraries/DateTime.html" target="_blank"><b>DateTime</b></a> é uma <i>library</i> do tipo Standard, então você não precisará baixá-la e nem instalá-la, ela já vem com o Robot. Mas para utilizá-la nos seus testes você precisará instanciá-la:</span></div>
<div>
<br />
<code><span style="color: #93c47d;"><b>*** Settings **</b>*</span><br /><span style="color: #a64d79;">Library</span> <span style="color: #eeeeee;">DateTime</span></code>
<br />
<code><span style="color: #eeeeee;"><br /></span></code>
<span style="font-family: "trebuchet ms" , sans-serif;">Com ela você poderá criar e converter valores de data/hora com as <i>keywords</i> <b style="font-style: italic;"><a href="http://robotframework.org/robotframework/latest/libraries/DateTime.html#Get%20Current%20Date" target="_blank">Get Current Date</a> </b>e <a href="http://robotframework.org/robotframework/latest/libraries/DateTime.html#Convert%20Time" target="_blank"><b><i>Convert Time</i></b></a>, por exemplo e poderá</span><span style="font-family: "trebuchet ms" , sans-serif;"> também fazer cálculos simples com as <i>keywords</i> <b><a href="http://robotframework.org/robotframework/latest/libraries/DateTime.html#Subtract%20Time%20From%20Date" target="_blank"><i>Subtract Time From Date</i></a> </b>e<b> </b></span><span style="font-family: "trebuchet ms" , sans-serif;"><a href="http://robotframework.org/robotframework/latest/libraries/DateTime.html#Add%20Time%20To%20Time" style="font-weight: bold;" target="_blank"><i>Add Time To Time</i></a>, por exemplo.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">É muito importante se atentar ao FORMATO das datas que você estiver trabalhando!!! Talvez, antes de manipular, você terá que converter para que fiquem uniformes!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">02 - Exemplo de uso</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">Trago aqui um exemplo bem bacana que surgiu inclusive no nosso <a href="https://join.slack.com/t/robotframeworkbrasil/shared_invite/enQtMjg4ODUwNjkxNTcyLTliZDEyNGZhZDA0MDkyYWUxOGMyMmJhZDlhYmRhZTlhMDMwYTljODllYTdlZThjYTQxYzlhNGQ0ZTA5N2UwMjk" target="_blank">Slack</a> (se você ainda não faz parte, corre lá!), nesse exemplo eu quero saber quantos meses têm entre duas datas:</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<script src="https://gist.github.com/mayribeirofernandes/5e7019c2190355c5fe515f8a35a09ddb.js"></script>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span><br />
<span style="font-family: "trebuchet ms" , sans-serif;">E aí curtiu??? Lembre-se de deixar suas dúvidas e sugestões nos comentários!! Até a próxima robotizadores!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
</div>
Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com1tag:blogger.com,1999:blog-264869294855361788.post-14741173076003511582018-04-16T10:43:00.000-07:002018-04-16T10:43:14.888-07:00Season Scripts - Ep. 03: Tipos de variáveis e seu uso<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "trebuchet ms" , sans-serif;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBMkRBKZrvhc4b-V1blFHCvXDZ8xCuul7TtgJv4Qei5vuMoQkpHLqd-ZJX_9am0pAckj0bc6aGqsRWJKNzdqCm7TdwEHJeTKX8o_y7SIDR4WSAQPR19IAUBCGCSjwjt9VLhs6MRxQIdqa/s1600/if_Robot_05_385835.png" /></span></a></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;">Olááá Robotizadores!! Nesse post vamos falar um pouco sobre como trabalhar com os diferentes tipos de variáveis do Robot Framework... Sim! Não temos somente a <b><span style="color: #a64d79;">${VAR}</span></b>, chega mais e conheça a <b><span style="color: #a64d79;">@{LISTA}</span> </b>e <b><span style="color: #a64d79;">&{DICIONARIO}</span></b>!!!</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<br />
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">Tipo Simples</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">O tipo mais comum é o simples, ele é declarado com o <b><span style="color: #a64d79;">$</span></b>, exemplo <b><span style="color: #a64d79;">${NOME}</span></b>.</span></div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">Tipo Lista</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">O tipo lista permite que você guarde vários itens em uma única variável. Ele é declarado com o <b><span style="color: #a64d79;">@</span></b>, exemplo <span style="color: #a64d79;"><b>@{FRUTAS}</b></span>. Os valores são acessados pelo índice que se inicia do zero.</span></div>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div>
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">Tipo Dicionário</span></h2>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;">O tipo dicionário permite que você guarde atributos de um objeto em uma única variável. Ele é declarado com o <b><span style="color: #a64d79;">&</span></b>, exemplo <span style="color: #a64d79;"><b>&{PESSOA}</b></span>. Os valores são acessados pelo OBJETO.argumento.</span></div>
</div>
<div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<h2>
<span style="color: #a64d79; font-family: "trebuchet ms" , sans-serif;">Exemplos:</span></h2>
<h2>
<span style="font-family: "trebuchet ms" , sans-serif;"></span></h2>
<script src="https://gist.github.com/mayribeirofernandes/878b6c27915d82d671a0c3f0e8bd8c2e.js"></script>
<span style="font-family: "trebuchet ms" , sans-serif;">OBS.: Quando você utiliza um valor único da lista ou dicionário, ela se torna simples, por isso no exemplo acima usamos com o $.</span><br />
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBpzy2_2YLod-1hd6vTEb0kseC0Wgptab9bjCDoW6I8hxONulCpcvldHbbEoe26G9L0C79jek5b3SGqxVuKauWZH9mLy1u1j4GhMGwy8COp1pxJK3qmV50SkvoEsS1L221HYglgRf75_EE/s1600/tipoVariaveisLOG.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="378" data-original-width="680" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBpzy2_2YLod-1hd6vTEb0kseC0Wgptab9bjCDoW6I8hxONulCpcvldHbbEoe26G9L0C79jek5b3SGqxVuKauWZH9mLy1u1j4GhMGwy8COp1pxJK3qmV50SkvoEsS1L221HYglgRf75_EE/s1600/tipoVariaveisLOG.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: Trebuchet MS, sans-serif;">Figura 01: LOG com o uso das variáveis</span></td></tr>
</tbody></table>
<span style="font-family: trebuchet ms, sans-serif;"><br /></span>
<span style="font-family: trebuchet ms, sans-serif;">Esses tipos de variáveis podem deixar seu teste mais limpo e organizado!! Use sem moderação!!! Até a próxima robotizadores!</span>Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com1tag:blogger.com,1999:blog-264869294855361788.post-4522569649318991372018-04-04T15:15:00.000-07:002018-04-04T15:15:06.306-07:00Season WEB Testing - Ep. 01: HTML Locators<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0HIkTbGBWehvdc1SNyielRo4NaN-DQac54yZvRMftn6QNrj0d90Av8LCftHRScRjwV7BI4gbw2cFO3kV6fGt4p7bDx5d9h584DjPI-depJJGduDXCXgrIGD_Xr6FFUiA5-F2JDjYCG4x0/s1600/if_Robot_11_385841.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Trebuchet MS, sans-serif;"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0HIkTbGBWehvdc1SNyielRo4NaN-DQac54yZvRMftn6QNrj0d90Av8LCftHRScRjwV7BI4gbw2cFO3kV6fGt4p7bDx5d9h584DjPI-depJJGduDXCXgrIGD_Xr6FFUiA5-F2JDjYCG4x0/s320/if_Robot_11_385841.png" width="320" /></span></a></div>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;">Oláááá Robotizadores!!!! Está com dificuldades em encontrar elementos web??? Está começando agora com testes WEB (assim como eu) e está precisando dar um <i>up </i>sobre <i>locators</i>? Esse é o seu post, bora lá ver umas dicas de HTML <i>locators</i>!!!!</span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<h2>
<span style="color: #ffd966; font-family: Trebuchet MS, sans-serif;">Estratégias básicas para localizar um elemento WEB</span></h2>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<h3>
<span style="color: #ffd966; font-family: Trebuchet MS, sans-serif;">Identificação simples dos locators:</span></h3>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Pelo ID </b> </span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Element id=Theld</span> ou: <span style="background-color: black; color: white;">Click Element Theld</span><span style="background-color: white; color: #a64d79;"> </span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Pelo Nome </b> </span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="color: white;"> <span style="background-color: black;">Click Element name=Blink</span></span> ou: <span style="color: white;"><span style="background-color: black;">Click Element Blink</span><span style="background-color: black;"> </span></span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Pelo Texto do Link </b></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Link link=Your site.com</span> ou: <span style="background-color: black; color: white;">Click Link Your Site.com</span> </span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Pelo Texto parcial do link </b></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Link partial link=Site.com</span> </span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Pelo XPATH</b> </span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Link xpath=//a[@id='Theld'] </span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><b><br /></b></span>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Pelo CSS </b></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Link css=a[id='Theld'] </span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><b><br /></b></span>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Pelo DOM </b></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Element dom=document.images[5] </span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Pela Tag</b></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Element tag=div</span></span><br />
<h3>
<span style="color: #ffd966; font-family: Trebuchet MS, sans-serif;">Explorando o CSS e XPATH para locators dinâmicos ou complexos:</span></h3>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Contendo um texto</b></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Element xpath=//*[contains(text(), "exemplo")]</span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Contendo um valor</b></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Element xpath=//input[contains(@type, 'Submit')]</span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Element css=input[type*='Submit']</span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Iniciando por um valor </b></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Element xpath=//input[starts-with(@type, 'Submit')] </span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Element css=input[type^='Submit'] </span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><b><br /></b></span>
<span style="font-family: Trebuchet MS, sans-serif;"><b>Terminando por um valor </b></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Element xpath=//input[ends-with(@type, 'Submit')] </span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"> Exemplo: <span style="background-color: black; color: white;">Click Element css=input[type$='Submit'] </span></span><br />
<div>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Trebuchet MS, sans-serif;">Para melhorar ainda mais esse POST, conto com a ajuda dos <b><span style="color: #ffd966;">Testers Web de plantão</span></b>, me mandem mais dicas não citadas ainda que colocarei no nosso post!!!!! Conto com vocês!!!! </span></div>
<div>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Trebuchet MS, sans-serif;">Abraço robotizadores e até a próxima!!</span></div>
Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com2tag:blogger.com,1999:blog-264869294855361788.post-7689198048005382652018-04-04T14:56:00.003-07:002018-04-04T14:56:55.685-07:00Season Running - Ep. 05: Debugando seu teste (via LOG)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4e9-iRV0tw3anL5EdlAz-gN-v3ZrqMkusvrmGdrho-pK3YpXTCx1jRZetTN2SuYsqW_68w52i4uBlpP1Ki73GtxmPhBq5RaFjk4yyOoWbHc9mIuuRCQ8WgHlR5DR4HZNNANr8uW64Ydp2/s1600/if_Robot_17_385847.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Trebuchet MS, sans-serif;"><img border="0" data-original-height="256" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4e9-iRV0tw3anL5EdlAz-gN-v3ZrqMkusvrmGdrho-pK3YpXTCx1jRZetTN2SuYsqW_68w52i4uBlpP1Ki73GtxmPhBq5RaFjk4yyOoWbHc9mIuuRCQ8WgHlR5DR4HZNNANr8uW64Ydp2/s1600/if_Robot_17_385847.png" /></span></a></div>
<span style="font-family: Trebuchet MS, sans-serif;"><span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;">Olááááá Robotizadores, faz tempo, mas tô de volta!!! Nesse post vamos falar de DEBUG, como entender o que está acontecendo melhor com seu teste e analisar os erros!!! Bora lá...</span></span><br />
<span style="font-family: Trebuchet MS, sans-serif;"><span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span>
</span><br />
<h2>
<span style="color: #666666; font-family: Trebuchet MS, sans-serif;">Debug via LOG</span></h2>
<span style="font-family: Trebuchet MS, sans-serif;">O robot não é compilado, então não temos uma IDE que passa linha a linha debugando... Mas podemos analisar os erros ou verificar os testes através do LOG mais detalhado... Abaixo mostrarei como gerar esse LOG!</span><br />
<div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; mso-outline-level: 3; text-align: justify;">
<v:shapetype coordsize="21600,21600" id="_x0000_t202" o:spt="202" path="m,l,21600r21600,l21600,xe"><span style="font-family: Trebuchet MS, sans-serif;">
<v:stroke joinstyle="miter">
<v:path gradientshapeok="t" o:connecttype="rect">
</v:path></v:stroke></span></v:shapetype><v:shape fillcolor="black [2144]" id="Caixa_x0020_de_x0020_Texto_x0020_11" o:gfxdata="UEsDBBQABgAIAAAAIQC75UiUBQEAAB4CAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbKSRvU7DMBSF
dyTewfKKEqcMCKEmHfgZgaE8wMW+SSwc27JvS/v23KTJgkoXFsu+P+c7Ol5vDoMTe0zZBl/LVVlJ
gV4HY31Xy4/tS3EvRSbwBlzwWMsjZrlprq/W22PELHjb51r2RPFBqax7HCCXIaLnThvSAMTP1KkI
+gs6VLdVdad08ISeCho1ZLN+whZ2jsTzgcsnJwldluLxNDiyagkxOquB2Knae/OLUsyEkjenmdzb
mG/YhlRnCWPnb8C898bRJGtQvEOiVxjYhtLOxs8AySiT4JuDystlVV4WPeM6tK3VaILeDZxIOSsu
ti/jidNGNZ3/J08yC1dNv9v8AAAA//8DAFBLAwQUAAYACAAAACEArTA/8cEAAAAyAQAACwAAAF9y
ZWxzLy5yZWxzhI/NCsIwEITvgu8Q9m7TehCRpr2I4FX0AdZk2wbbJGTj39ubi6AgeJtl2G9m6vYx
jeJGka13CqqiBEFOe2Ndr+B03C3WIDihMzh6RwqexNA281l9oBFTfuLBBhaZ4ljBkFLYSMl6oAm5
8IFcdjofJ0z5jL0MqC/Yk1yW5UrGTwY0X0yxNwri3lQgjs+Qk/+zfddZTVuvrxO59CNCmoj3vCwj
MfaUFOjRhrPHaN4Wv0VV5OYgm1p+LW1eAAAA//8DAFBLAwQUAAYACAAAACEAAg5b2zMEAABKDQAA
HwAAAGNsaXBib2FyZC9kcmF3aW5ncy9kcmF3aW5nMS54bWzsV8Fu4zYQvRfoPxC8J5YdWUmMVRaJ
2ywKZLOBnSJnmqJsIhSpkrTj7Nf0W/plfSSlxMlmF8m2hxZYHySKHL7hzLyZod+93zaKbIR10uiS
DvczSoTmppJ6WdLfr8/3jihxnumKKaNFSe+Fo+9Pfv7pHZssLWtXkhMgaDdhJV15304GA8dXomFu
37RCY602tmEen3Y5qCy7A3KjBqMsKwYNk5qePEL9wjwjayu/A0oZfiuqKdMb5gCp+GR3pjuj4v8c
mU305oNt5+2VDSfnl5srS2RVUnhOswYuooNuoRPD5+DZruUjwLa2TZA3dU22Jc3HeVEA6r6keBfj
PEtwYusJx3pR5Ef5GAIcEqPDYjQad/pWn76NwFe/fhsDh0yHwWDngK4Nx9ObLy0eDnuTp0xuGakE
ucY5DcFC74Owi/jtmcHZ42x0RY/lOi/+O054MIBNWuv8B2EaEgYltYL7SDS2uXA+BaQXCdaBytW5
VIrUSrYl1aA6Jdb4G+lX8xVrEdVhIqrD/rjDkda4EPXwFSkvpsqSDVMlrW6TtFo3H02V5orDLIux
xCkfxCMzlm4XMD8Kcq8EPe5B2QS6AgGi/oPXqRpC7PW6iigc47qrK++nX7QLk8veZUpqwkJZGRbI
fvxQWThTArnT8cVLJWYIVQpQH5TgC6XDU5sQpLQaZoLKjkF+O488DVSr7oPwAm9wD1GMuelafi5B
hgvm/BWzKFfQj8LnP+FRK3NXUtONKFkZ+/ml+SCPEoJVSu5Q/krq/lgzC7Ko3zTYcDzMkbDEx498
fDjCh91dWeyu6HUzNaAL0gini8Mg71U/rK1pboytToNWLDHNobukvh9OPb6wgBrLxelpHHPTtMxf
6HmLapd4GKh+vb1htu3ywSNNL01k9ktpkWSTx0/X3tSyC0nyaQyI83N/r0TkQ/R8FwgVFAcJmHTF
fSLkMOuJipDtSpzWMZuCrHdJFvwP1SPGlsd1DDtwG4AtoqoikVq/dzaD8z7DUJA5miLqGgxKWQ5d
zIN1/r4VNePI4qnRzii0CNIybRxmslF2lhXZMd6jLM8OwhOr0vPVOWukQpnNj1FuV8w6EcMQTRZs
F5UpubDyCeh5No6QXwM9gJbnoNztgF7LRjhyKe7IzDRMPwEf4cQHUJBHJQdfnHiIrv0UHD6E34L7
/Ik1C+PJXkX2Bx/F2s2EWyvPKuPI3gXxFo4ie5K4xtwKL5xHUXd4h4ggWAEowAhdhTSavSEY/0Of
PVoZLU9ED+b/YPsTQv6H2f7Xnz+YC75G/j52x7UT8/ax1/bt04WaHvit9EzUuNfi2tbfRuxyEW44
qeOgjaPvLMKz78fYEHbWaNFv3NttiWUllu837k81v9dvtH/Y30htbOwLD3eu1GWU72+jdZJPHSeZ
jxoXbr2DZ/8iokj3ryf8Vdn9PvkbAAD//wMAUEsDBBQABgAIAAAAIQCSfYfgHQcAAEkgAAAaAAAA
Y2xpcGJvYXJkL3RoZW1lL3RoZW1lMS54bWzsWUtvGzcQvhfof1jsvbFkvWIjcmDJctzEL0RKihwp
idplzF0uSMqObkVy6qVAgbTooQF666EoGqABGvTSH2PAQZv+iA65L1Ki4gdcIChsAcbu7DfD4czs
zOzwzt1nEfWOMReExW2/eqviezgesTGJg7b/aLD92W3fExLFY0RZjNv+DAv/7sann9xB6yNKkiFD
fDwIcYQ9EBSLddT2QymT9ZUVMQIyErdYgmN4NmE8QhJuebAy5ugEFojoymql0lyJEIn9DZAolaAe
hX+xFIoworyvxGAvRhGsfjCZkBHW2PFRVSHETHQp944Rbfsgc8xOBviZ9D2KhIQHbb+i//yVjTsr
aD1jonIJr8G3rf8yvoxhfLSq1+TBsFi0Xm/Um5uFfA2gchHXa/WavWYhTwPQaAQ7TXWxZbZWu/UM
a4DSS4fsrdZWrWrhDfm1BZ03G+pn4TUolV9fwG9vd8GKFl6DUnxjAd/orHW2bPkalOKbC/hWZXOr
3rLka1BISXy0gK40mrVuvtsCMmF0xwlfa9S3W6uZ8BIF0VBEl1piwmK5LNYi9JTxbQAoIEWSxJ6c
JXiCRhCTXUTJkBNvlwQhBF6CYiaAXFmtbFdq8F/96vpKexStY2RwK71AE7FAUvp4YsRJItv+fZDq
G5Czt29Pn785ff776YsXp89/zdbWoiy+HRQHJt/7n77559WX3t+//fj+5bfp0vN4YeLf/fLVuz/+
/JB42HFpirPvXr978/rs+6//+vmlQ/omR0MTPiARFt4+PvEesgg26NAfD/nlOAYhIibHZhwIFCO1
ikN+T4YWen+GKHLgOti242MOqcYFvDd9aincD/lUEofEB2FkAfcYox3GnVZ4oNYyzDyYxoF7cT41
cQ8ROnat3UWx5eXeNIEcS1wiuyG21DykKJYowDGWnnrGjjB27O4JIZZd98iIM8Em0ntCvA4iTpMM
yNCKppJph0Tgl5lLQfC3ZZu9x16HUdeut/CxjYR3A1GH8gNMLTPeQ1OJIpfIAYqoafBdJEOXkv0Z
H5m4npDg6QBT5vXGWAgXzwGH/RpOfwBpxu32PTqLbCSX5MglcxcxZiK32FE3RFHiwvZJHJrYz8UR
hCjyDpl0wfeY/Yaoe/ADipe6+zHBlrvPzwaPIMOaKpUBop5MucOX9zCz4rc/oxOEXalmk0dWit3k
xBkdnWlghfYuxhSdoDHG3qPPHRp0WGLZvFT6fghZZQe7Aus+smNV3cdYYE83N4t5cpcIK2T7OGBL
9NmbzSWeGYojxJdJ3gevmzbvQamLXAFwQEdHJnCfQL8H8eI0yoEAGUZwL5V6GCKrgKl74Y7XGbf8
d5F3DN7Lp5YaF3gvgQdfmgcSu8nzQdsMELUWKANmgKDLcKVbYLHcX7Ko4qrZpk6+if3Slm6A7shq
eiISn9sBzfU+jf+u94EO4+yHV46X7Xr6HbdgK1ldstNZlkx25vqbZbj5rqbL+Jh8/E3NFprGhxjq
yGLGuulpbnoa/3/f0yx7n286mWX9xk0n40OHcdPJZMOV6+lkyuYF+ho18EgHPXrsEy2d+kwIpX05
o3hX6MGPgO+Z8TYQFZ+ebuJiCpiEcKnKHCxg4QKONI/HmfyCyLAfogSmQ1VfCQlEJjoQXsIEDI00
2Slb4ek02mPjdNhZrarBZlpZBZIlvdIo6DCokim62SoHeIV4rW2gB625Aor3MkoYi9lK1BxKtHKi
MpIe64LRHEronV2LFmsOLW4r8bmrFrQA1QqvwAe3B5/pbb9RBxZggnkcNOdj5afU1bl3tTOv09PL
jGlFADTYeQSUnl5Tui7dntpdGmoX8LSlhBFuthLaMrrBEyF8BmfRqagXUeOyvl4rXWqpp0yh14PQ
KtVo3f6QFlf1NfDN5wYam5mCxt5J22/WGhAyI5S0/QkMjeEySiB2hPrmQjSA45aR5OkLf5XMknAh
t5AIU4PrpJNmg4hIzD1Koravtl+4gcY6h2jdqquQED5a5dYgrXxsyoHTbSfjyQSPpOl2g6Isnd5C
hk9zhfOpZr86WHGyKbi7H45PvCGd8ocIQqzRqioDjomAs4Nqas0xgcOwIpGV8TdXmLK0a55G6RhK
6YgmIcoqipnMU7hO5YU6+q6wgXGX7RkMapgkK4TDQBVY06hWNS2qRqrD0qp7PpOynJE0y5ppZRVV
Nd1ZzFohLwNztrxakTe0yk0MOc2s8Gnqnk+5a3mum+sTiioBBi/s56i6FygIhmrlYpZqSuPFNKxy
dka1a0e+wXNUu0iRMLJ+Mxc7Z7eiRjiXA+KVKj/wzUctkCZ5X6kt7TrY3kOJNwyqbR8Ol2E4+Ayu
4HjaB9qqoq0qGlzBmTOUi/SguO1nFzkFnqeUAlPLKbUcU88p9ZzSyCmNnNLMKU3f0yeqcIqvDlN9
Lz8whRqWHbBmvYV9+r/xLwAAAP//AwBQSwMEFAAGAAgAAAAhAJxmRkG7AAAAJAEAACoAAABjbGlw
Ym9hcmQvZHJhd2luZ3MvX3JlbHMvZHJhd2luZzEueG1sLnJlbHOEj80KwjAQhO+C7xD2btJ6EJEm
vYjQq9QHCMk2LTY/JFHs2xvoRUHwsjCz7DezTfuyM3liTJN3HGpaAUGnvJ6c4XDrL7sjkJSl03L2
DjksmKAV201zxVnmcpTGKSRSKC5xGHMOJ8aSGtHKRH1AVzaDj1bmIqNhQaq7NMj2VXVg8ZMB4otJ
Os0hdroG0i+hJP9n+2GYFJ69elh0+UcEy6UXFqCMBjMHSldnnTUtXYGJhn39Jt4AAAD//wMAUEsB
Ai0AFAAGAAgAAAAhALvlSJQFAQAAHgIAABMAAAAAAAAAAAAAAAAAAAAAAFtDb250ZW50X1R5cGVz
XS54bWxQSwECLQAUAAYACAAAACEArTA/8cEAAAAyAQAACwAAAAAAAAAAAAAAAAA2AQAAX3JlbHMv
LnJlbHNQSwECLQAUAAYACAAAACEAAg5b2zMEAABKDQAAHwAAAAAAAAAAAAAAAAAgAgAAY2xpcGJv
YXJkL2RyYXdpbmdzL2RyYXdpbmcxLnhtbFBLAQItABQABgAIAAAAIQCSfYfgHQcAAEkgAAAaAAAA
AAAAAAAAAAAAAJAGAABjbGlwYm9hcmQvdGhlbWUvdGhlbWUxLnhtbFBLAQItABQABgAIAAAAIQCc
ZkZBuwAAACQBAAAqAAAAAAAAAAAAAAAAAOUNAABjbGlwYm9hcmQvZHJhd2luZ3MvX3JlbHMvZHJh
d2luZzEueG1sLnJlbHNQSwUGAAAAAAUABQBnAQAA6A4AAAAA
" o:spid="_x0000_s1026" stroked="f" style="height: 21.75pt; left: 0; margin-left: 472.3pt; margin-top: 35.6pt; mso-height-percent: 0; mso-height-percent: 0; mso-height-relative: margin; mso-position-horizontal-relative: margin; mso-position-horizontal: right; mso-position-vertical-relative: text; mso-position-vertical: absolute; mso-width-percent: 0; mso-width-percent: 0; mso-width-relative: margin; mso-wrap-distance-bottom: 0; mso-wrap-distance-left: 9pt; mso-wrap-distance-right: 9pt; mso-wrap-distance-top: 0; mso-wrap-style: square; position: absolute; text-align: left; v-text-anchor: top; visibility: visible; width: 523.5pt; z-index: 251673600;" type="#_x0000_t202"><v:fill angle="180" color2="#666 [1936]" colors="0 black;31457f #080808;1 #666" focus="100%" rotate="t" type="gradient"><span style="font-family: Trebuchet MS, sans-serif;"><v:textbox></v:textbox></span></v:fill></v:shape><b><span style="color: black; font-family: Trebuchet MS, sans-serif; mso-bidi-font-family: "Times New Roman"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: PT-BR;"></span></b><br />
<h3>
<span style="font-family: Trebuchet MS, sans-serif;"><b><span style="color: black; font-family: Trebuchet MS, sans-serif; mso-bidi-font-family: "Times New Roman"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: PT-BR;"><br /></span></b><b><span style="color: black; font-family: Trebuchet MS, sans-serif; mso-bidi-font-family: "Times New Roman"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: PT-BR;"><span style="color: #666666;">Executar com configuração de <i style="mso-bidi-font-style: normal;">level</i> do Log:</span></span></b></span></h3>
</div>
<div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; mso-outline-level: 3; text-align: justify;">
<div class="MsoNormal">
<span style="font-family: Trebuchet MS, sans-serif;"><span style="background-color: black;"><span style="color: white;">robot -L trace suiteTestes</span></span><o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<div class="MsoNormal">
<span style="background-color: black; color: white; font-family: Trebuchet MS, sans-serif;">robot -L debug suiteTestes</span></div>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: justify;">
<span style="font-family: Trebuchet MS, sans-serif;"><span style="font-family: "Arial",sans-serif; mso-bidi-font-family: "Times New Roman"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: PT-BR;">Onde, <b>-L</b> é o parâmetro que indica
que o LOG será gravado em modo (</span><b><span style="font-family: "Trebuchet MS",sans-serif; mso-bidi-font-family: "Times New Roman"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: PT-BR;">trace/debug</span></b><span style="font-family: "Arial",sans-serif; mso-bidi-font-family: "Times New Roman"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: PT-BR;">).<o:p></o:p></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: justify;">
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: justify;">
<h3>
<b style="mso-bidi-font-weight: normal;"><span style="font-family: Trebuchet MS, sans-serif; mso-bidi-font-family: "Times New Roman"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: PT-BR;"><span style="color: #666666; font-family: Trebuchet MS, sans-serif;">Modos
possíveis de passar no argumento -L:</span></span></b></h3>
<div>
<span style="mso-bidi-font-weight: normal;"><span style="font-family: Trebuchet MS, sans-serif;"><div>
<ul>
<li><b><span style="color: #666666;">INFO:</span></b> O level padrão para mensagens normais. Por padrão, as mensagens abaixo desse nível não são mostradas no arquivo de log. Obs.: Se você não especificar o -L no comando de execução, o log será detalhado em nível INFO.</li>
</ul>
<ul>
<li><b><span style="color: #666666;">DEBUG</span></b><span style="color: #666666;"><b>:</b></span> Usado para fins de depuração. Útil, por exemplo, para registrar em log o que as bibliotecas estão fazendo internamente. Quando uma keyword falha, um traceback, registrado automaticamente, mostra onde no código a falha ocorreu.</li>
</ul>
<ul>
<li><span style="color: #666666; font-weight: bold;">TRACE: </span>Nível de depuração mais detalhado. Os argumentos da keyword e os valores de retorno são registrados automaticamente.</li>
</ul>
</div>
</span></span></div>
</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: justify; text-indent: 35.4pt;">
<h3 style="text-indent: 0px;">
<b style="mso-bidi-font-weight: normal;"><span style="font-family: Trebuchet MS, sans-serif; mso-bidi-font-family: "Times New Roman"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: PT-BR;"><span style="color: #666666; font-family: Trebuchet MS, sans-serif;">LOG gerado no modo TRACE:</span></span></b></h3>
<div style="text-indent: 0px;">
<span style="font-family: Trebuchet MS, sans-serif;">Mesmo tendo gerado no modo TRACE, os níveis DEBUG e INFO também são gerados, e você pode escolher qual quer ver:</span></div>
<div style="text-indent: 0px;">
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDTTHBJCZThk-JefxRy8-vSm2cktBGaoUvOmwsokpsm9042AFRgTEsWctYPUXYrDRey7SzrDVzWrwpjwZ2x1HLM__iLSsDtBB3vbA4vEzUcPWpcn7gDrfutuyahzow23o-y1UB0WtKM-DM/s1600/DebugLOGlevel.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="673" data-original-width="900" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDTTHBJCZThk-JefxRy8-vSm2cktBGaoUvOmwsokpsm9042AFRgTEsWctYPUXYrDRey7SzrDVzWrwpjwZ2x1HLM__iLSsDtBB3vbA4vEzUcPWpcn7gDrfutuyahzow23o-y1UB0WtKM-DM/s1600/DebugLOGlevel.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7CF4mn2XsAwH1or8HcMnGs17fJmA6n4pHfscYkegI63B-0bOJ1VHYANoPoupVvkinJp_HmDPHL5_Rwpt7lQXNLGU3sSlOnPwxeIMccx4jh-JLFHhaRIMwiWls9pjpvZ-NgCuvVysJlEGZ/s1600/DebugLOGlevel.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Trebuchet MS, sans-serif;"></span></a></div>
<div style="text-indent: 0px;">
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Trebuchet MS, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Trebuchet MS, sans-serif;">Bora debugar seu teste??? Até a próxima robotizadores!!!!!!!</span></div>
<div>
<b style="mso-bidi-font-weight: normal;"><span style="font-family: Trebuchet MS, sans-serif; mso-bidi-font-family: "Times New Roman"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: PT-BR;"><span style="color: #666666; font-family: Trebuchet MS, sans-serif;"><br /></span></span></b></div>
</div>
<br />Mayara "May" Fernandeshttp://www.blogger.com/profile/15280938531215472534noreply@blogger.com0