Vídeo recomendado
https://youtu.be/diWPPPhW-9E

[Resolvido] Marcar checkboxes com mesmo ID selenium VBA

A Web está aí, não há como negar. Ela é onipresente em praticamente toda operação eletrônica realizada nos dias de hoje. Como não podia ser diferente, o Excel, ferramenta máxima para analistas e profissionais das mais diversas áreas do mercado precisa estar alinhado com esta necesssidade. E ele está! Neste forum, o debate é focado em expor dúvidas, sugestões, modelos de código e exemplos de uso do Excel na Integração com tecnologias Web.
le_lo28
Colaborador
Colaborador
Mensagens: 11
Registrado em: Sex Dez 08, 2017 7:19 pm

[Resolvido] Marcar checkboxes com mesmo ID selenium VBA

Mensagem por le_lo28 »

Boa tarde!

Estou buscando elementos em uma página com Selenium VBA e ocorre que nessa página existem duas checkboxes com o mesmo ID, XPath e nome iguais e não estou conseguindo marcar as duas ou diferenciar uma da outra.

Código da checkbox 1:

Código: Selecionar todos

<input type="checkbox" name="data[Proposta][id_termo]" title="Termos e Condições" value="1" id="PropostaIdTermo" data-validator="frmPropostaValor" placeholder="">
Código da checkbox 2:

Código: Selecionar todos

<input type="checkbox" name="data[Proposta][id_termo]" title="Termos e Condições" value="1" id="PropostaIdTermo" data-validator="frmCompra" placeholder="">
O XPath de ambas é o mesmo:

Código: Selecionar todos

xpath: //*[@id="PropostaIdTermo"]
O que interessa no meu caso é marcar a checkbox 2. Quando eu busco o elemento pelo xpath ele assina-la sempre a checkbox 1 e com isso não consigo clicar no botão que preciso para prosseguir.

Tentei fazer um for each no elemento mas sem sucesso.

Agradeço antecipadamente,

Marcelo
Editado pela última vez por le_lo28 em Sex Mar 23, 2018 4:45 pm, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Marcar checkboxes com mesmo ID selenium VBA

Mensagem por Mikel Silveira Fraga »

Fala Marcelo, boa noite meu amigo.

Cara, realmente isso é novidade pra mim, ter dois elementos com o mesmo Id, mas paciência.

Bem, nesse caso, você pode usar o método findElementsByXPath, com "s" no Elements. Os métodos com esse "s" no final, na verdade são coleções que possuem uma mesma referência, nesse caso, uma coleção com os XPath´s iguais. Pode fazer algo assim:

Código: Selecionar todos

Dim oElemCol As WebElements
Set oElemCol = driver.findElementsByXPath("//*[@id='PropostaIdTermo']")
Para selecionar, pode utilizar o método Item, sendo que:
- CheckBox1: oElemCol.Item(1)
- CheckBox2: oElemCol.Item(2)

Teste e nos retorne com os resultados.

Abraços e bom descanso.


le_lo28
Colaborador
Colaborador
Mensagens: 11
Registrado em: Sex Dez 08, 2017 7:19 pm

Re: Marcar checkboxes com mesmo ID selenium VBA

Mensagem por le_lo28 »

Grande Mikel blz? Obrigado pela resposta.

Fiz da forma que vc explicou mas não deu erro mas não marcou nada :|

Código: Selecionar todos

Dim oElemCol As WebElements, hTermo As WebElement, hTermo2 As WebElement
Set oElemCol = driver.FindElementsByXPath("//*[@id=""PropostaIdTermo""]")
   
Set hTermo = oElemCol.Item(1)
Set hTermo2 = oElemCol.Item(2)
Essa é a tela do site:
Tela1.jpg
Tela1.jpg (78.17 KiB) Exibido 6771 vezes
Pelo jeito o checkbox está "embaixo" de alguma coisa, ou seja, desse frmCompra e não consigo chegar nele.
Veja o resultado quando mando inspecionar o elemento:

Código: Selecionar todos

<div class="col-md-12">
<form id="frmCompra" method="post" novalidate="novalidate">
<legend><i class="fa fa-dollar fa-lg"></i> Compra Imediata <span class="high"> <span>R$</span> <span class="valor"><b>13.300<sup><sup>,00</sup></sup></b></span></span></legend>
<div class="form-group validate-required">
<input type="hidden" name="data[Proposta][id_termo]" id="PropostaIdTermo_" value="0" data-validator="frmCompra"><input type="checkbox" name="data[Proposta][id_termo]" title="Termos e Condições" value="1" id="PropostaIdTermo" data-validator="frmCompra" placeholder="">                                                                    Estou ciente dos <a href="/pages/termos-e-condicoes-atacado" class="fancy">Termos e Condições</a>                                                                </div>
<div class="form-group">
<input type="hidden" name="submit" value="">
<button class="btn blue-bg" type="button" title="Comprar imediatamente" id="btnSubmit">Comprar</button>
</div>
</form>
</div>
Eu tentei dessa forma, mas marcou a primeira checkbox :oops:

Código: Selecionar todos

Set Form1 = driver.FindElement(oCheck.xpath("/html/body/div[2]/div/article/div[3]/div/div[2]/div/form/div[1]").Class _
("form-group")).FindElementByXPath("//*[@id=""PropostaIdTermo""]")
Form1.Click
Obrigado.

Abraços,

Marcelo


Avatar do usuário
PRMPOKER
Consultor
Consultor
Mensagens: 206
Registrado em: Ter Dez 04, 2012 8:57 am

Re: Marcar checkboxes com mesmo ID selenium VBA

Mensagem por PRMPOKER »

Bom dia amigo, tudo bem? Vou tentar dar um pitaco aqui:

Faz o seguinte: captura todos os elementos da coleção, conforme o Mikel falou e então faz um contador que vai identificar o SEGUNDO elemento na coleção, a partir dai, ele clica no INPUT que você quer.

Não pude testar aqui, mas o caminho é esse:

Código: Selecionar todos

Dim conta as Integer

Set Form1 = driver.FindElement(oCheck.xpath("/html/body/div[2]/div/article/div[3]/div/div[2]/div/form/div[1]").Class _
("form-group")).FindElementByXPath("//*[@id=""PropostaIdTermo""]")

For Each objLink2 In Form1 
	If conta = 2 then
		objLink2 .Click
	End if
conta =conta + 1
Next objLink2
Um abraço!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


le_lo28
Colaborador
Colaborador
Mensagens: 11
Registrado em: Sex Dez 08, 2017 7:19 pm

Re: Marcar checkboxes com mesmo ID selenium VBA

Mensagem por le_lo28 »

PRMPOKER escreveu: Qui Mar 01, 2018 10:48 am Bom dia amigo, tudo bem? Vou tentar dar um pitaco aqui:

Faz o seguinte: captura todos os elementos da coleção, conforme o Mikel falou e então faz um contador que vai identificar o SEGUNDO elemento na coleção, a partir dai, ele clica no INPUT que você quer.

Não pude testar aqui, mas o caminho é esse:

Código: Selecionar todos

Dim conta as Integer

Set Form1 = driver.FindElement(oCheck.xpath("/html/body/div[2]/div/article/div[3]/div/div[2]/div/form/div[1]").Class _
("form-group")).FindElementByXPath("//*[@id=""PropostaIdTermo""]")

For Each objLink2 In Form1 
	If conta = 2 then
		objLink2 .Click
	End if
conta =conta + 1
Next objLink2
Um abraço!
Boa tarde!
Me desculpe responder só agora, acabei enrolado com outros projetos e não consegui responder.

PRMPOKER, fiz uma pequena alteração no código e tive que retardar a execução em 2s para evitar que ocorresse erro veja:

Código: Selecionar todos

Dim oElemCol As WebElements
Dim conta As Integer

conta = 0

Set oElemCol = driver.FindElementsByXPath("//*[@id=""PropostaIdTermo""]")

For Each objlink2 In oElemCol
Call Sleep(1 * 2000)
    If conta = 1 Then
        objlink2.Click
    End If
conta = conta + 1
Next objlink2
Funcionou perfeitamente!

Mikel, a sua solução funcionou da seguinte forma:

Código: Selecionar todos

Dim oElemCol As WebElements
Set oElemCol = driver.FindElementsByXPath("//*[@id=""PropostaIdTermo""]")

Call Sleep(1 * 2000)

Set hTermo2 = oElemCol.Item(2) 'checkbox termo de compra botão comprar
hTermo2.SendKeys ("\ue007") 'executa um "enter" para selecionar a checkbox
hTermo2.Click
Tive que enviar o comando "enter" para selecionar a caixa e depois marca-la.

Agradeço a ajuda de todos!

Abraços,

Marcelo


Avatar do usuário
PRMPOKER
Consultor
Consultor
Mensagens: 206
Registrado em: Ter Dez 04, 2012 8:57 am

Re: [Resolvido] Marcar checkboxes com mesmo ID selenium VBA

Mensagem por PRMPOKER »

Boa noite amigos, tudo bem?

le_lo28: realmente há uma necessidade de colocar temporizadores de retardo, pois nem sempre o HTML está TOTALMENTE carregado na página, pois depende, entre outras coisas, da velocidade da conexão, que geralmente não acompanha a velocidade de execução do código VBA :lol:

Fico feliz que tenha podido ajudar.

Grande abraço e conta conosco sempre.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder