Dúvida na busca de elementos que não possuem ID!

css X xpath é polemico, Dan North falou sobre isso aqui e no final das contas ele fala pra evitar e usar quando não tem alternativa.

@lruggiero

Boa tarde.

Sim, não é a prática ideal, mas não é ‘criminosa’ como foi apontada…
A questão é:- Resolve o problema do nosso amigo com os objetos sem ID com facilidade, pelo menos permitindo a elaboração dos testes até que os IDs sejam criados (prática ideal).
Pelo que ele demonstrou no tópico, não possui um conhecimento avançado das técnicas de identificação e duvido muito que a empresa tenha interesse em dar o tempo necessário para aprendê-las.
No mais, tenho certeza que podemos aproveitar este momento para trocar conhecimentos e aprender mais :)

Resolver resolve, XPath é muito poderoso, como falei anteriormente. Agora, sugerir de usar o XPath que o Chrome DevTools gera é muito irresponsável, é terrível pra manutenção e legibilidade, ainda mais pra quem tá começando. Nem todo mundo sabe o suficiente de XPath pra conseguir escrever um seletor legível e fácil de manter, então definitivamente não é algo pra se recomendar pra todos os casos, tem que ter precaução E também aprender sobre XPath antes, no mínimo saber algumas funções (principalmente contains), saber navegar na árvore do DOM, etc.

Sobre a questão de performance:
1 - esse post tá bem antigo pra ter uma conclusão (em se tratando de web), Chrome está na versão 61 ou superior e o post compara a versão 31
2 - mesmo que seja pouco significativa (em web), multiplica pelo número de vezes que vc vai buscar um elemento dentro da execução de uma suite inteira de testes, é a mesma lógica de colocar sleep no código, tipo “ah, mas é só 1 segundo”, mas quando percebe o número de vezes que esse sleep será chamado…
3 - em Mobile a diferença de performance é absurda, é muito lento (iOS principalmente, pelo menos nas apps que já trabalhei)

Sobre solução mais efetiva já falei na resposta seguinte, conheça seu framework e veja o que ele pode te oferecer pra facilitar as coisas. Caso esteja usando Selenium WebDriver puro, tentar antes as outras formas possíveis, até chegar no CSS e, caso não seja possível escrever um CSS selector, usar XPath (mas direito, sem pegar uma “tripa” do DevTools tipo “/html/body/div/div/div[2]/div/span”). Entenda que estou sendo “chato” com isso porque já sofri muito com código porco e difícil de manter, já fui iniciante, já tive essa mentalidade de “ah, isso resolve, dps a gente melhora” (e acaba não melhorando nunca). Lá em 2013/2014, quando comecei a estudar Clean Code e a vivenciar na pele o quanto que qualidade de código (de teste mesmo) é essencial e a diferença que faz, a mentalidade foi mudando… legibilidade e manutenibilidade devem ser sempre prioridade.

-1

@stefanteixeira

Volto a afirmar, não está focando na necessidade que foi relatada…
A resposta " conheça seu framework" não ajuda muito, já que nada mais é do que um ‘vai estudar’, ou mais ou menos o que o programador falou…
A pergunta dele é:- "outro detalhe é que a classe do componente é utilizada por outros mais, e isso tornaria inviável eu buscar pela classe, ou seria a unica forma?"
Ficaria mais satisfeito se você tivesse apontado por exemplo o uso do Selenium plugin ou ideex pra ver todos os locators básicos e testar os tempos de resposta.

Como já disse respondendo in loco a pergunta dele: - "Utilizar ID é apenas uma técnica para localizar e referenciar objetos da página, existem outras alternativas. "

Para completar apontei a solução funcional de menor esforço e maior confiabilidade, ou seja, rápido e funciona!

Se quiser entrar em mérito de performance pense apenas assim: Se não conseguir automatizar não tem tempo pra analisar, se colocar algo mais lento, pode analisar e melhorar.

Abraço

@genunasumus said in Dúvida na busca de elementos que não possuem ID!:

Para completar apontei a solução funcional de menor esforço e maior confiabilidade, ou seja, rápido e funciona!

Bom dia @genunasumus ,

Discordo quanto ao Xpath ser o de menor esforço, e principalmente, maior confiabilidade. Isso devido que:

  • O markup está sujeito a alterações, e qualquer alteração irá quebrar os testes. Algo que não ocorreria se tivesse utilizado ID. Porém contornável apenas se a pessoa tiver um bom conhecimento de Xpath e souber usar contains(), e não um plugin que gera o Xpath.

  • Legibilidade péssima, veja um exemplo de elemento localizado por Xpath abaixo:

var elem = element(by.xpath('/*/p[2]/b[2]/following-sibling::node()'+'[count(.|/*/p[2]/b[2]/following-sibling::br[1]/preceding-sibling::node))'	+'='+'count((/*/p[2]/b[2]/following-sibling::br[1]/preceding-sibling::node()))'+']'));

Perceba a dificuldade para entender qual elemento HTML tal localizador se propõe a identificar. Portanto, não utilize xpath para localizar elementos se não tiver muito conhecimento sobre como utilizar e quando utilizar, pois muitas das vezes quando o elemento não possui ID há saídas contornos que não envolvem Xpath.

@paulo-gonçalves

Bom dia.

Você entendeu o contexto da discussão?

"O markup está sujeito a alterações, e qualquer alteração irá quebrar os testes. Algo que não ocorreria se tivesse utilizado ID. "

O AUTOR DA QUESTÃO RELATA QUE NÃO EXISTEM IDs.

1- Existe alguma maneira mais rápida, simples e confiável que o xpath para este caso (do autor)? Se colocar o CSS como opção vou achar contraditório pois o desempenho é quase o mesmo que o xpath.
Não abstraia para o mundo perfeito, ajude a pessoa que solicita informação. 300k de teoria mas ninguém aponta uma solução prática, sendo que existe.

PS- Esse xpath não parece ser nativo do toools, parece mais algo gerado por ferramenta ou framework.

Abraço;

@genunasumus vc não consegue entender que não tá ajudando o cara dando uma solução que funciona a curto prazo, mas que ferra com ele a médio/longo prazo… E ainda tá sendo desnecessariamente rude com o outro colega que não concorda com sua opinião.

Melhor parar por aqui, deixa o autor do post ler as respostas, pesquisar e decidir o que fazer.

E ae pessoal, desculpem a demora, então conseguimos que o desenv liberasse o código pra nós ( mesmo que alteremos pra testar localmente por enquanto) e irão subir as alterações depois, mas uma parte pelo menos o desenv responsável irá fazer a inserção dos ids. Quanto ao Xpath eu achei interessante mesmo, tanto que até conversei com o desenv sobre isso, mas pra início assim creio que não seja o mais viável, porem gostei da discussão e das idéias e opiniões de todos, só de saber que posso contar com ajuda aqui é animador :D

@stefanteixeira

Onde fui rude?

@bruno-nogueira-andrade

Você talvez enfrente alguma dificuldade com elementos dinâmicos, grids e objetos comprados ou feitos, por isso eu recomendaria algum curso ou livro para entender bem os locators, técnicas e conceitos.
No mais, boa sorte :)

PS- Udemy tem cursos baratos, tenho certeza que irá gostar… a parte de sincronia é bem importante também.

@genunasumus Agradeço pela dica e me desculpe pela demora, to apanhando um pouco pois confesso que sou mais de quebrar a cabeça tentando do que lendo, dai estou lendo o livro que o @stefanteixeira recomendou, também temos os cursos do alura, acaba que tem muito recurso disponível :D e até mesmo no stack overflow acabo encontrando algo de dúvida, no mais esta encaminhando aos poucos.

Mais uma vez muito obrigado rs

Log in to reply

Looks like your connection to Agile Testers was lost, please wait while we try to reconnect.