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.
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.
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.
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:
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 (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:
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.
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
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.
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:
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
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.
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