模拟单击使用与IE一起使用的Javascript的链接

时间:2009-05-06 02:06:47

标签: javascript internet-explorer firefox

我想让java脚本点击页面上的链接..我在网上发现了一些建议添加如下函数的内容:

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它不起作用!

有什么想法吗?

5 个答案:

答案 0 :(得分:36)

我认为你仍然需要调用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 );
    }
}

答案 1 :(得分: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);
    }
}

答案 2 :(得分:1)

如果仍然出现错误,请尝试此操作(使用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);
}
}

答案 3 :(得分:0)

如果您想模拟仅针对链接的点击,您可以使用此功能:

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

答案 4 :(得分:0)

我们发现了一种更简单的模拟右键单击的方法(在IE8中测试)。使用双击或两次单击,然后使用Shift-F10右键单击。我不确切知道为什么会这样,但确实如此。在下面的示例代码中,我们使用Selenium方法单击两次,然后使用IE驱动程序查找WebElement并发送键序列Shift-F10,它模拟鼠标右键单击。我们使用它来测试基于GWT的Web应用程序。其中一个地方不起作用的是树控件,其中上下文菜单设置为出现在鼠标坐标处。通常,鼠标坐标为负,因此右键单击菜单项不会导致显示子菜单选项。为了处理这种情况,我们在控件中添加了一些代码,这样如果鼠标坐标为负,则上下文菜单会显示为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);