Agile Testers TechTalks | Test War Stories - Andreia Gaita @ Tech Lead do GitHub. Saiba mais aqui

Como você mapearia este elemento?



  • Boa tarde pessoal,

    Como vocês mapeariam o elemento abaixo?

    • Não possui ID
    • Não possui name
    • As classes css são comuns a outros elementos
    • O placeholder default é comum a outros campos de horário no form
    • O valor default (vazio) é comum a outros campos do form
    <div class="form-groups">
    	<input type="text" class="form-controller" placeholder="00:00" value="">
    </div>
    

    Utilizei Xpath Axes mas gostaria de saber se, neste caso, existe uma alternativa mais coerente:

    driver.findElement(By.xpath("//div[contains(text(), 'Horários')]/descendant::input[1]"));
    

    Como vocês mapeiam/mapeariam?



  • Última pergunta: usando Selenium WebDriver em Java?

    E cara, em vez de ficar sofrendo tanto, pq não ir no HTML e colocar um id nesse elemento? Ou pedir pra um dev fazer isso?



  • @stefanteixeira É Selenium WebDriver em Java. Não tenho acesso/autonomia sobre o código fonte… O ideal seria ter algum identificador único. Não é difícil fazer com xpath. Mas se houver algo mais coerente/performático/simples (como seria o id/name/css selector) seria bacana saber.

    Obrigado pela sugestão!



  • Então XPath é o jeito mesmo… não tem muito pra onde fugir.

    Saindo do escopo da sua pergunta, o problema disso é que esse tipo de coisa não deveria acontecer, se vc não tem autonomia sobre o código, alguém tem que ter. Não sei como é seu cenário, se vc trabalha em fábrica ou consultoria, mas isso tem que ser levado pra um líder de projeto e ser resolvido de alguma forma. Automação é pra ser algo efetivo, fácil de manter, não deveríamos ficar quebrando a cabeça pra automatizar um input de texto… tem muita coisa mais importante que pode ser feita, saca?



  • Vendo o resto do HTML talvez até dê pra pensar num seletor CSS…


  • MVP

    Olha…ou pede ajuda ao dev para ter algum tipo de id ou estuda muito o css para descobrir algum tipo de padrão que possa te ajudar… Nessas horas só vendo muito o html para ter alguma idéia…



  • Estive pensando em utilizar o css nesse caso, porém como não tenho prática com o Selenium e apenas com o Protractor, senti uma leve dificuldade pois a sintaxe é um pouco diferente e não pude testar.
    Abaixo tentei implementar de forma com que ele selecione o primeiro input da lista:

    driver.findElement(by.CssSelector('input[placeholder="00:00" ]:nth-of-type(1)'));
    driver.findElement(by.CssSelector('input:nth-of-type(1)'));
    

    Procurei entender com base nesses 2 sites:
    https://saucelabs.com/resources/articles/selenium-tips-css-selectors
    http://elementalselenium.com/tips/verifying-locators

    Nesse caso, como o @Ramses-Saccol-de-Almeida e o @stefanteixeira disseram, é difícil fugir do Xpath por não ser um input ‘amigo do tester’. E creio que essa implementação em css que sugeri não muda muita coisa caso dê certo, pois continua oferecendo certa dificuldade de entendimento.

    Depois me dá o retorno se algum desses foi útil, e se conseguiu fazer com que tornem esse trecho automatizável sem que passe por dificuldade.



  • @stefanteixeira @Ramses-Saccol-de-Almeida @Paulo-Gonçalves obrigado pelas dicas :)

    Paulo, sua sugestão com css funcionou. Ficou assim, como no exemplo que você deu acima:

    driver.findElement(By.cssSelector("input[placeholder='00:00']:nth-of-type(1)"))
    

    Vou fazer mais alguns testes com os outros seletores que acabei conhecendo lendo melhor sobre o assunto (first-child, last-child, etc).

    Valeu! o/



  • @samuellucas said in Como você mapearia este elemento?:

    @stefanteixeira @Ramses-Saccol-de-Almeida @Paulo-Gonçalves obrigado pelas dicas :)

    Paulo, sua sugestão com css funcionou. Ficou assim, como no exemplo que você deu acima:

    driver.findElement(By.cssSelector("input[placeholder='00:00']:nth-of-type(1)"))
    

    Vou fazer mais alguns testes com os outros seletores que acabei conhecendo lendo melhor sobre o assunto (first-child, last-child, etc).

    Valeu! o/

    Bom saber que funcionaram :smiley: , o xpath é nosso inimigo, tenta alterar todos os elementos que usam xpath por css no mínimo.
    Claro que respeitando a ordem de preferência, que poderia ser da seguinte maneira:

    1. Id
    2. Name
    3. css
    1. Xpath