Topicos Recents
-
QA Sênior @ Carenet Longevity (São Paulo)
Vagas1 -
Bate-papo sobre DevOps – Grupo de mentoria Talking About Testing
Feed de Blogs e Posts1 -
[Dúvida] Jira - Plugin para Gerenciamento de Teste
Geral2 -
Indicações de empresas (in company) - Cursos
Treinamento e Eventos1 -
What is the best fuzzer (automated software testing tool) to find 0-days? Why? Quora Answer
Feed de Blogs e Posts1 -
Tarek - Load testing web services at Mozilla with Molotov | Agile Testers Conference 2018
Treinamento e Eventos1 -
Hacking JavaScript Games - Accessing private javascript variables at runtime via debugging
Feed de Blogs e Posts1 -
Talking About Testing & Patas Dadas
Feed de Blogs e Posts1 -
Agile Testers 2019 News
Geral4 -
Escreva código uma só vez
Feed de Blogs e Posts1 -
Automated tests in a CD/CI pipeline
Feed de Blogs e Posts1 -
How to Practice your JavaScript, Software Testing and Test Automation
Feed de Blogs e Posts1 -
How to Pretty Print JSON using Browser Dev Tools
Feed de Blogs e Posts1 -
How to bypass no paste controls on a web form
Feed de Blogs e Posts1 -
Quais minhas metas para 2019?
Geral8 -
AWS Online Tech Talks 2019
Feed de Blogs e Posts1 -
What does the EvilTester Patreon Contain?
Feed de Blogs e Posts1 -
Analista de Testes Mobile
Vagas1 -
Tendências para a área de Quality Assurance em 2019
Artigos e Tutoriais1 -
Software Test Engineer @ Zendesk (Copenhagem - Denmark)
Vagas3
Winium automatizando testes DeskTop com Selenium
-
De repente me deparo com um cenário diferente, novo emprego cheio de desafios e oportunidades. Ocasião de exercer e executar minha maior paixão que é a de automatizar testes.
Primeiro desafio, nos últimos 8 anos trabalhei com equipes de desenvolvedores Java, eis que minha nova equipe só possui Dev’s C#. Então seguindo as boas práticas onde o QA deve falar a mesma língua da equipe vamos aprender Selenium com C#! Mas isso é assunto pra um próximo artigo.
O Desafio que vou compartilhar aqui é a necessidade de automatizar para aplicações Desktop. Pesquisei e encontrei ferramentas bem interessantes como Autoit, Sikuli…
Mas será que não dá pra automatizar desktop usando o glorioso Selenium?
Foi ai que conheci o Winium Uma ferramenta Open Source mantida pela 2GIS para automação de aplicativos desktop. Que veio oferecer através do seu Driver suporte para aplicações Windows. Com ela podemos escrever testes em qualquer linguagem de programação que seja suportada pelo Webdriver e ela oferece suporte para Aplicativos do Windows Desktop (WPF, WinForms) entre outros como aplicação mobile para Windowsphone.
Neste Post, estarei mostrando como automatizar uma operação simples na calculadora do Windows.
Primeiro vamos fazer o download do Winium Driver,
https://github.com/2gis/Winium.Desktop/releases
É necessário também o uso de uma ferramenta que nos apontará qual Locator (elementos da tela) que deveremos usar nos testes com Selenium. Testei 3 ferramentas, o-
Finder tools do AutoIt ( https://www.autoitscript.com/site/autoit-script-editor/downloads/ ),
-
Visual UI Automation Verify (https://uiautomationverify.codeplex.com/releases )
• -
list item UISpy https://github.com/2gis/Winium.Cruciatus/tree/master/tools/UISpy .
Destas ferramentas a que melhor me adaptei foi a UISpy e com ela que iremos trabalhar nesse tutorial.
Mãos a massa!
Crie uma classe de test no Visual studio ;
Crie a propiedade RemoteWebDriver
public RemoteWebDriver Driver { get; set; }Para iniciar é necessário chamar o navegador do Winium criaremos então o método SetUp assim:
public void SetUp() { var dc = new DesiredCapabilities(); dc.SetCapability("app", @"C:\Windows\System32\calc.exe"); this.Driver = new RemoteWebDriver(new Uri("http://localhost:9999"), dc); }
Para o tearDow podemos usar método close do Selenium webdriver.
[TearDown] public void after() { Driver.Close(); }
Vamos Agora começar a inspecionar as janelas abertas para isso abra o UISpy;
Observe que o UISpy exibe todas as janelas abertas entre elas esta a calculadora , que será o aplicativo que iremos testar.
Navegando na Treeview encontraremos os elementos no painel properties na lateral direita. Para automatizar o teste podemos passar o AutomationID ou o Name.Observe que para o numero “2” o Name é “2” e o AutomationID é “132”.Dessa forma vamos fazer o método de teste somando 2 + 2;
[Test] public void Calcular() { Driver.FindElement(By.Id("132")).Click(); Driver.FindElement(By.Id("93")).Click(); Driver.FindElement(By.Name("2")).Click(); Driver.FindElement(By.Name("Igual a")).Click(); Thread.Sleep(2000); Assert.AreEqual(true, Driver.FindElement(By.Name("4")).Displayed); }
Para executar o teste é preciso que o driver do Winium esteja rodando, Descompacte o Driver baixado no início deste artigo e execute.
Agora é so rodar o teste .
-
-
Ótimo Tutorial, parabéns.
-
Excelente, faz tempo que procuro algo do tipo.
-
@bruwesley , Obrigado pelo feedback!
-
Boa @Fernando-Pimentel eu vejo bastante gente perguntando sobre isso, já é um ponta pé inicial para os interessados(as).
-
Excelente artigo!
Apenas complementando, atentem-se de utilizar o package “using OpenQA.Selenium.Remote;” para rodar certinho
-
@Fernando-Pimentel muito bom.
-
Obrigado @Fred-Moreira ,@CarolCiola e @Rafael-Chiavegatto , esses Feedbacks são muito importantes para publicação de novos posts. abraço!
-
@Fernando-Pimentel pelo que percebi o AutomationId gera um número diferente a cada vez que abrimos o UISpy, já o Name não. Creio que por conta disso, a utilização do Name seja melhor, correto?
-
@CarolCiola , é um cuidado que se pode tomar, entretanto a aplicação que estou automatizando não deparei com essa mudança de Id’s . Mas acredito que seja uma pratica eficiente , alinhar com os Dev’s quanto a colocação de names e usar os mesmos.
-
Ótimo post @Fernando-Pimentel, de grande valia.
Porém sobre a ferramenta UISpy, o site da microsoft informa que é obsoleto e não está mais dispon´vel, sendo substituída pelo Inspect.exe. -
Obrigado ´pelo FeedBack @Paulo-Gonçalves , apesar da microsoft ter descontinuado ela ainda é a que melhor me atende , no github do winium eles disponibilizam a ferramenta para dowload
https://github.com/2gis/Winium.Cruciatus/tree/master/tools/UISpy
-
Tenho uma duvida, comparando o Winnium com o appium desktop vocês teriam um Prós e Contras?
-
@Fernando-Pimentel, excelente artigo.
-
Pergunta @Fernando-Pimentel você tem algum exemplo de utilização de menus e submenus?
-
@Fernando-Pimentel muito útil o artigo, obrigado por compartilhar!
-
Que bom que gostou @bredah !
-
Ótimo post sobre o Winium estava na pesquisa há algum tempo, gostaria de tirar uma dúvida. Aqui na empresa utilizamos um projeto java com a implementação do Selenium WebDriver e estou em um novo projeto onde um fluxo web termina com as informações em uma aplicação desktop. Gostaria de saber se a utilização do Winium com o java e os elementos WebDriver ele funciona corretamente ?
-
Olá @fernando-pimentel . Obrigado por compartilhar conosco o teu conhecimento!
Falando sobre o método Calcular(), pelo que eu pude entender, o “Displayed” ele localiza qualquer coisa que tenha o nome “4” e retorna TRUE se localizado. No exemplo demonstrado, ele está retornando TRUE pois ele encontrou o botão 4 do teclado da calculadora. Pois bem, se eu alterar a linha para Assert.AreEqual(true, Driver.FindElement(By.Name(“0”)).Displayed); ele também retornará TRUE, pois também encontrou o botão 0 do teclado da calculadora.Estou usando o Win10 em pt, a solução que eu achei para este método foi este:
[Test] public void TesteCalculoDoisMaisDois() { Driver.FindElement(By.Name("Dois")).Click(); //Botão 2 Driver.FindElement(By.Name("Mais")).Click(); //Botão + Driver.FindElement(By.Name("Dois")).Click(); //Botão 2 Driver.FindElement(By.Name("Igual a")).Click(); //Botão Igual Thread.Sleep(2000); //aguarde 2 segundos Assert.AreEqual(true, Driver.FindElement(By.Name("Exibição é 4")).Displayed); // Verifica se o resultado //é 4 e retorna TRUE, senão false //Onde o "Exibição é" é o nome do meu campo resultado. }
Ainda atua com Teste Automatizado com aplicações desktop? Se sim, recomenda algum curso online?
Estou começando os meus estudos em Teste Automatizado e ainda tenho muito que aprender
Obrigado novamente! -
@alissonkissel O elemento já é procurado por nome, isso já deixa a asserção já um pouco fraca. No caso tu reforçou ela um pouco mais…Acho que talvez procurar a tela onde é informado isso e depois procurar um “locator filho” podia deixar um pouco menos dependente a texto…Mas não né… as vezes não tem como…heehhee