Página 1 de 2

Executar função OnClick do java [RESOLVIDO]

Enviado: Qui Out 12, 2017 11:06 pm
por bruno153
Alguém poderia me ajudar tirando um dúvida que tenho entre o VBA e o IE?.
Tenho essa linha de código:
<tr onclick =“showHide(‘group25’, ‘figGroup25’, this);” class="titulo">
E quero saber como executar essa função pelo vba.

Re: Executar função OnClick do java

Enviado: Sex Out 13, 2017 6:45 pm
por webmaster
"Daria" para fazer isso:

Código: Selecionar todos

browser.Navigate("javascript:showHide(‘group25’, ‘figGroup25’, this);")
O problema eh o 'this'. Ele representa o componente no qual a funcao esta definida. O melhor a fazer eh achar o elemento e ativar o click.

Att

Re: Executar função OnClick do java

Enviado: Sex Out 13, 2017 9:13 pm
por PRMPOKER
Boa noite pessoal.

Posso dar um pitaco aqui?

Utilize a função que postei no outro tópico, para utilizar xpath no VBA. Procure o xpath do teu elemento pelo Firebug (no Firefox) e então utilize aquela função para acionar exatamente o elemento desejado. Então poderá acionar o evento Onclick da tua <tr>.

Dá uma pensada e me diz se deu certo!

Um abraço!

Re: Executar função OnClick do java

Enviado: Sáb Out 14, 2017 5:09 pm
por webmaster
PRMPOKER,

O pitaco é super válido. A parte boa é que o XPath também pode ser extraído pelo Chrome pelo inspertor de elementos.

Valeu!

Re: Executar função OnClick do java

Enviado: Seg Out 16, 2017 9:46 am
por bruno153
O problema é que tenho que fazer pelo IE ja que estou trabalho em uma máquina que está com direitos limitados, ou seja, não posso instalar nada.

Já achei o elemento que contém a avaliação que quero mas n consigo executar essa função, tem outras abas do mesmo jeito que consigo porque elas contém a ID. Já tentei click, onclick, fireevent e nada.

Re: Executar função OnClick do java

Enviado: Seg Out 16, 2017 10:06 am
por PRMPOKER
Bom dia pessoal, tudo bem?

Tomáz, tens razão. Já utilizei essa função no CR mas eu acho que me apaixonei pelo FF, hahahahaha... mas sim, são duas maneiras de fazer.

Bruno, entendi a dificuldade: esta função depende da propriedade ID para retornar o elemento, então realmente não vai funcionar.

O mundo perfeito seria adaptar a função para não depender do ID, ou seja, retornar o que for solicitado ou executar algum evento baseado no xpath.

Não tenho muito tempo para analisar e modificar a função por conta de projetos nos quais estou trabalhando. Vamos propor um desafio aos colegas para conseguir uma ajuda para adaptar a função?

Se eu conseguir algo, volto para ajudar.

Um abraço!

Editado:

Deixa eu ver se entendi corretamente: você já tem acesso ao elemento e consegue extrair o InnerText dele?

Re: Executar função OnClick do java

Enviado: Seg Out 16, 2017 10:32 pm
por bruno153
Sim, eu consigo extrair o innertext dele mas não consigo executar função nele.
Estava pensando se tem alguma forma de definir o ID dele pelo vba, inserir um id dentro da linha.

Re: Executar função OnClick do java

Enviado: Seg Out 16, 2017 11:11 pm
por Mikel Silveira Fraga
Fala galera, boa noite.

Gostei desse tópico, esta em alta e bem comentado. Grandes suportes do Tomás e do Paulinho.

Bruno, se não me engano, mesmo o elemento "tr" sendo uma linha de uma tabela, é possível aplicar o Método Click nele.

Se você consegue ler o texto dele, no caso o innerText, é possível realizar o Click no mesmo.

Tente substituir o innerText pelo Click e veja se funciona.

Caso não dê certo, sei que existe uma outra forma de ativar uma função JS, armazenada dentro de um evento como o onClick. Inclusive já postei uma apostila aqui, que pode ser baixada pelo link abaixo:
- [APOSTILA] Uso Biblioteca Microsoft Internet Control

Teste a sugestão, leia a apostila e nos retorne o resultado.

Abraços!!!

Re: Executar função OnClick do java

Enviado: Ter Out 17, 2017 10:06 am
por PRMPOKER
Bom dia pessoal.

Mikel, seja muito bem vindo ao tópico. Você sempre enriquece e abrilhanta nossas discussões. Aliás, parabéns pela excelente apostila. Eu não a conhecia e já adicionei na minha biblioteca. :D

Tem uma maneira que eu utilizo em meus projetos, adaptada com informações da apostila do Mikel, que pode dar certo para resolver a questão: Bora testar?

Código: Selecionar todos


Dim elemCollection As Object
    Dim obj As Object
    
    Set elemCollection = ie.Document.getElementsByTagName("td")
    
    For Each obj In elemCollection 'Loop para localizar se existe a td com a propriedade procurada.
    
        If obj.class = "titulo" Then
        	msgbox obj.class 'Linha incluída para testar se o código identifica corretamente a propriedade.
		ie.Document.parentwindow.execscript (“showHide(‘group25’, ‘figGroup25’, this);”) 'Executa o JavaScript sem clicar no botão
        End If

    Next obj

Bruno, nos avisa aí.

Um abraço e bom dia a todos.

Re: Executar função OnClick do java

Enviado: Ter Out 17, 2017 2:39 pm
por Mikel Silveira Fraga
Boa tarde a todos.

Grande Paulinho, essa apostila não é minha e sim de um grande usuário chamado Pedro, o qual tinha um blog excelente sobre VBA e VSTO. Infelizmente o mesmo teve que cancelar o blog, o qual tinha um conteúdo fantástico.

Sobre o modelo que você postou, existe apenas um problema que estou suspeitando: identificar um conteúdo pelo Atributo Class é problemático, pois geralmente esse Atributo possuí o mesmo valor em vários Elementos HTML.

Como exibido pelo amigo Bruno, o onClick vai para o Group 25 e, se analisarmos nesse ponto de vista, existem outros 24 elementos na mesma situação.

Se minha análise estiver correta, o ideal seria um código que seguisse uma das duas sugestões abaixo:

1ª) Usar o seu código Paulo, sendo que teria que ter a opção para os demais Groups, ou seja, um Select Case ou If ElseIf Then, para identificar o grupo que o usuário deseja;

2ª) A sugestão que dei anteriormente sobre o evento Click no elemento "tr", gerando uma coleção com base no valor do Atributo Class e ativando o Click via identificação índice dos elementos.

Porém, fica muito difícil saber exatamente qual a forma de se conseguir resolver o problema, sendo que temos apenas uma linha do HTML para analisar e sem poder realizar testes.

Fica a mais um pitaco da minha parte.

Abraços a todos.