Как я могу инициировать щелчок события JavaScript

У меня есть гиперссылка на моей странице. Я пытаюсь автоматизировать много щелчков по гиперссылке для тестирования. Есть ли какой-либо способ, которым можно моделировать 50, нажимает на гиперссылку с помощью JavaScript?

<a href="#" target="_blank" onclick="javascript:Test("Test");">MSDN</a>

Я ищу onClick триггер события от JavaScript.

191
задан DVK 4 March 2010 в 08:17
поделиться

3 ответа

Выполнение одиночного щелчка на элементе HTML: Просто сделайте element.click(). Большинство основных браузеров поддерживают это.


Чтобы повторить щелчок более одного раза: Добавьте к элементу идентификатор для его уникального выбора:

<a href="#" target="_blank" id="my-link" onclick="javascript:Test('Test');">Google Chrome</a>

и вызовите метод .click() в коде JavaScript через цикл for:

var link = document.getElementById('my-link');
for(var i = 0; i < 50; i++)
   link.click();
258
ответ дан 23 November 2019 в 05:32
поделиться

Используйте среду тестирования

Это может быть полезно - http://seleniumhq.org/ - Selenium - это веб-приложение автоматизированная система тестирования.

Вы можете создавать тесты, используя плагин Firefox Selenium IDE

Ручной запуск событий

Чтобы вручную запускать события правильно, вам нужно будет использовать разные методы для разных браузеров - либо эл. dispatchEvent или el.fireEvent , где el будет вашим элементом привязки. Я считаю, что и то, и другое потребует создания объекта Event для передачи.

Альтернативный, не совсем правильный, быстрый и грязный способ:

var el = document.getElementById('anchorelementid');
el.onclick(); // Not entirely correct because your event handler will be called
              // without an Event object parameter.
8
ответ дан 23 November 2019 в 05:32
поделиться

Вот что я использую: http://jsfiddle.net/mendesjuan/rHMCy/4/

Обновлено для работы с 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" (e.g., "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 classes.
        // 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);
    }
};

Обратите внимание, что вызов fireEvent (inputField, 'change' ); не означает, что фактически изменится поле ввода. Типичный вариант использования для запуска события изменения - это когда вы устанавливаете поле программно и хотите, чтобы обработчики событий вызывались, поскольку вызов input.value = "Something" не запускает событие изменения.

81
ответ дан 23 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: