Эмулировать щелчок по ссылке с Javascript, который работает с IE

Я хочу, чтобы java script нажал ссылку на странице.. Я нашел что-то в сети, которое предлагает добавить такую ​​функцию:

function fireEvent(obj,evt){

    var fireOnThis = obj;
    if( document.createEvent ) {
      var evObj = document.createEvent('MouseEvents');
      evObj.initEvent( evt, true, false );
      fireOnThis.dispatchEvent(evObj);
    } else if( document.createEventObject ) {
      fireOnThis.fireEvent('on'+evt);
    }
}

Затем вызовите его, используя:

fireEvent(document.getElementById('edit_client_link'),'click');

Кажется, что он отлично работает для FF, но с IE он не работает!

Любые идеи?

Ответ 1

Мне кажется, вам все равно нужно вызвать document.createEventObject - вы только проверили его там. Невыполненный код следует, но на основе docs он должен работать.

function fireEvent(obj,evt){

    var fireOnThis = obj;
    if( document.createEvent ) {
      var evObj = document.createEvent('MouseEvents');
      evObj.initEvent( evt, true, false );
      fireOnThis.dispatchEvent( evObj );

    } else if( document.createEventObject ) {
      var evObj = document.createEventObject();
      fireOnThis.fireEvent( 'on' + evt, evObj );
    }
}

Ответ 2

Сначала это не сработало для меня, а затем я увидел, что в коде отсутствует параметр для части IE. Вот обновление, которое должно работать:

function fireEvent(obj, evt) {
    var fireOnThis = obj;

    if (document.createEvent) {
        // alert("FF");
        var evtObj = document.createEvent('MouseEvents');
        evtObj.initEvent(evt, true, false);
        fireOnThis.dispatchEvent(evtObj);
    } 

    else if (document.createEventObject) {
        // alert("IE");
        var evtObj = document.createEventObject();
        fireOnThis.fireEvent('on'+evt, evtObj);
    }
}

Ответ 3

Попробуйте, если вы все еще получаете ошибку (использование JQuery + прототипа)

function fireEvent(element,event){  
if (document.createEventObject){
// dispatch for IE
try {
      var evt = document.createEventObject();
      jQuery(element).change();
      return element.fireEvent('on'+event,evt);
} catch(e) { }                  
}
else{
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true ); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
}

Ответ 4

Если вы хотите имитировать клики только для ссылок, вы можете использовать это:

function clickLink(id){
location.href=document.getElementById(id).href;
}

Ответ 5

Мы нашли более простой способ имитации правого щелчка (тестировался в IE8). Используйте двойной клик или два клика, затем щелкните правой кнопкой мыши, используя Shift-F10. Я точно не знаю, почему это работает, но это так. В приведенном ниже примере кода мы используем метод Selenium для двойного щелчка, затем с помощью драйвера IE найдите WebElement и отправьте последовательность клавиш Shift-F10, которая эмулирует щелчок правой кнопкой мыши. Мы используем это для тестирования веб-приложений на основе GWT. В одном месте это не сработало, было в дереве управления, где контекстное меню было установлено, чтобы появляться в координатах мыши. Часто координаты мыши были отрицательными, поэтому щелчок правой кнопкой мыши по элементу меню не приводило к отображению параметров дочернего меню. Чтобы обработать этот случай, мы добавили немного кода в элемент управления, чтобы, если бы координаты мыши были отрицательными, контекстное меню отображается в 0,0.

selenium.click("//td[@role='menuitem' and contains(text(), 'Add')]");
selenium.click("//td[@role='menuitem' and contains(text(), 'Add')]");
new InternetExplorerDriver().findElement(By.xpath("//td[@role='menuitem' and contains(text(), 'Add')]")).sendKeys(Keys.SHIFT, Keys.F10);