Selecionar opção em um list - Ruby+Capybara

Topic created · 7 Posts · 102 Visualizações
  • Bom dia pessoal,

    Estou com uma dúvida quanto ao código para realizar a seleção de valores diante deste HTML, neste caso preciso encontrar e clicar na opção OP6. Neste projeto de automação utilizo Ruby, Cucumber e Capybara.

    <ul id=“select-options-3cef4e70-c7b5-41d9-8673-5388f45c1853” class=“dropdown-content select-dropdown w-100 active” style=“width: 219px; position: absolute; top: 0px; left: 0px; opacity: 1; display: block;”><li class=“active”>

    <li class=" “><span class=“filtrable”> OP1</span></li>
    <li class=” “><span class=“filtrable”> OP2</span></li>
    <li class=” “><span class=“filtrable”> OP3</span></li>
    <li class=” “><span class=“filtrable”> OP4</span></li>
    <li class=” “><span class=“filtrable”> OP5</span></li>
    <li class=” "><span class=“filtrable”> OP6</span></li></ul>

    Alguém já passou por esta dificuldade e conseguiria ajudar?

  • Vou considerar que vc precisa clicar no elemento html <ul> para que você possa ver a lista… (pq tem um sytle=“display:block”)

    Olha… vc pode ser masoquista e esse elemento por xpath (porque esse ID parece ser gerado no processo de build) OU vc pode pedir para um desenvolvedor (ou vc mesmo) colocar um identificação chamada data-test-id, que é um ID que não impacta nada a aplicação e vc consegue mapear facilmente. ( https://kentcdodds.com/blog/making-your-ui-tests-resilient-to-change) ( Popularizado com react mas nao precisa usar react para usar data-test-id por ai…)

    Depois que vc acha o elemento ul, vc pode mandar um click baseado no value da lista ou colocar identificação nos elementos da lista 🙂

  • Estou iniciando em automação, então se falar algo fora do contexto me corrijam.

    Uma forma que eu acredito que pode dar certo, é realizar uma localização pelo class do elemento e enviar fazer um jquery para alterar o id do elemento para que você consiga localizar sem dificuldades. Segue exemplo:

    script = ‘$(’.dropdown-content select-dropdown w-100 active’).attr(“id”,“temp”);’

    caso queira armazenar em uma variável, coloque entre aspas simples o script.
    esse comando jquery localiza o elemento e altera o atributo (attr), no caso o atributo id.
    assim vc consegue localizar o elemento ul por id.

    depois pode seguir em frente para selecionar o elemento da lista que precisa.

  • Opa
    Acho que isso pode funcionar:
    find(:xpath, ‘//span[@class=“filtrable”][contains(text(), “OP6”)]’)

  • @david-cs noooo … por favor… não faça isso 😞
    Jquery is dead… se for fazer manipulação do DOM, use javascript vanilla… só projetos legado usam jquery… e olhe lá… tenha dó de quem vai pegar seu codigo fazendo coisas complicadas sem sentido.

    Ela pode usar classSelector como vc falou… mas essa classe ta com cara de genérica e se tiver mais de um dropdown na pagina, vai dar conflito de ambiguidade.

  • @Jonathan-Soares não vai funcionar pq é um dropdown disfarçado de <ul> … ou seja… provavelmente os <li> estão style="display: hidden"

  • @Leonardo-Galani Verdade, não tinha me atentado a isso.
    Talvez que fizer um clique primeiro no <ul> para tornar os <li> visíveis e depois executar os clique no <li> funcione.
    Mas @Roberto-de-Lima se tirar um print ou gravar um vídeo da tela/funcionalidade ou do teste sendo executado nos ajude a te ajudar.