Эмулировать щелчок по ссылке с 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);