我想让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它不起作用!
有什么想法吗?
答案 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);