Como posso acionar um clique do evento JavaScript?

Eu tenho um hiperlink na minha página. Eu estou tentando automatizar um número de cliques no hiperlink para fins de teste. Existe alguma maneira de simular 50 cliques no hiperlink usando JavaScript?

MSDN 

Estou procurando o acionador de evento onClick do JavaScript.

Realizando um único clique em um elemento HTML: Simplesmente faça element.click() . A maioria dos principais navegadores suporta isso .


Para repetir o clique mais de uma vez: adicione um ID ao elemento para selecioná-lo exclusivamente:

 Google Chrome 

e chame o método .click() em seu código JavaScript através de um loop for:

 var link = document.getElementById('my-link'); for(var i = 0; i < 50; i++) link.click(); 

Aqui está o que eu uso: http://jsfiddle.net/mendesjuan/rHMCy/4/

Atualizado para funcionar com o IE9 +

 /** * Fire an event handler to the specified node. Event handlers can detect that the event was fired programatically * by testing for a 'synthetic=true' property on the event object * @param {HTMLNode} node The node to fire the event handler on. * @param {String} eventName The name of the event without the "on" (eg, "focus") */ function fireEvent(node, eventName) { // Make sure we use the ownerDocument from the provided node to avoid cross-window problems var doc; if (node.ownerDocument) { doc = node.ownerDocument; } else if (node.nodeType == 9){ // the node may be the document itself, nodeType 9 = DOCUMENT_NODE doc = node; } else { throw new Error("Invalid node passed to fireEvent: " + node.id); } if (node.dispatchEvent) { // Gecko-style approach (now the standard) takes more work var eventClass = ""; // Different events have different event classs. // If this switch statement can't map an eventName to an eventClass, // the event firing is going to fail. switch (eventName) { case "click": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead. case "mousedown": case "mouseup": eventClass = "MouseEvents"; break; case "focus": case "change": case "blur": case "select": eventClass = "HTMLEvents"; break; default: throw "fireEvent: Couldn't find an event class for event '" + eventName + "'."; break; } var event = doc.createEvent(eventClass); event.initEvent(eventName, true, true); // All events created as bubbling and cancelable. event.synthetic = true; // allow detection of synthetic events // The second parameter says go ahead with the default action node.dispatchEvent(event, true); } else if (node.fireEvent) { // IE-old school style, you can drop this if you don't need to support IE8 and lower var event = doc.createEventObject(); event.synthetic = true; // allow detection of synthetic events node.fireEvent("on" + eventName, event); } }; 

Note que chamando fireEvent(inputField, 'change'); não significa que ele realmente alterará o campo de input. O caso de uso típico para triggersr um evento de mudança é quando você define um campo por meio de programação e deseja que os manipuladores de events sejam chamados, já que chamar input.value="Something" não acionará um evento de mudança.

o que

  l.onclick(); 

é exatamente chamar a function onclick de l , isto é, se você tiver definido um com l.onclick = myFunction; . Se você não definiu l.onclick , não faz nada. Em contraste,

  l.click(); 

simula um clique e aciona todos os manipuladores de events, sejam adicionados com l.addEventHandler('click', myFunction); , em HTML ou de qualquer outra forma.

Estou bastante envergonhado por haver tantas aplicabilidades parciais incorretas ou não reveladas.

A maneira mais fácil de fazer isso é por meio do Chrome ou do Opera (meus exemplos usarão o Google Chrome) usando o console. Digite o seguinte código no console (geralmente em 1 linha):

 var l = document.getElementById('testLink'); for(var i=0; i<5; i++){ l.click(); } 

Isto irá gerar o resultado requerido

Use uma estrutura de teste

Isso pode ser útil – http://seleniumhq.org/ – O Selenium é um sistema de teste automatizado de aplicativos da web.

Você pode criar testes usando o plugin do Firefox Selenium IDE

Disparo manual de events

Para triggersr manualmente os events da maneira correta, você precisará usar methods diferentes para diferentes navegadores – el.dispatchEvent ou el.fireEvent onde el será seu elemento Anchor. Eu acredito que ambos irão requerer a construção de um object Event para passar.

A alternativa, não totalmente correta, maneira rápida e suja seria esta:

 var el = document.getElementById('anchorelementid'); el.onclick(); // Not entirely correct because your event handler will be called // without an Event object parameter. 

.click() não funciona com o Android (veja no mozilla docs , na seção móvel). Você pode acionar o evento de clique com este método:

 function fireClick(node){ if (document.createEvent) { var evt = document.createEvent('MouseEvents'); evt.initEvent('click', true, false); node.dispatchEvent(evt); } else if (document.createEventObject) { node.fireEvent('onclick') ; } else if (typeof node.onclick == 'function') { node.onclick(); } } 

Deste post

Aviso justo:

element.onclick() não se comporta como esperado. Ele só executa o código dentro do onclick="" attribute , mas não aciona o comportamento padrão.

Eu tive problema semelhante com o botão de opção não definido para marcado, mesmo que a function personalizada onclick estivesse funcionando bem. Teve que adicionar radio.checked = "true"; para defini-lo. Provavelmente o mesmo acontece e para outros elementos (após a.onclick() deve haver também window.location.href = "url"; )

IE9 +

 function triggerEvent(el, type){ var e = document.createEvent('HTMLEvents'); e.initEvent(type, false, true); el.dispatchEvent(e); } 

Exemplo de uso:

 var el = document.querySelector('input[type="text"]'); triggerEvent(el, 'mousedown'); 

Fonte: https://plainjs.com/javascript/events/trigger-an-event-11/