jquery – .click()不适用于某些元素的mocha-phantomjs

我正在使用 Mocha test frameworkChai assertions library编写一些测试,我已经在chrome浏览器中测试了这些测试,但它们工作正常,但是我尝试在无头浏览器 mocha-phantomjs和.click()事件中,我发送某些元素只是没有似乎在射击,而其他人正在工作.

测试成功登录到网站,这是使用:

$("#login").click()

“#login”是一个表单提交按钮,它可以很好的使用点击这种方式.

接下来我想点击一个菜单项,这是一个锚点元素.

$("#menuItemToClick").click();

这是在mocha-phantomjs停止工作的地方,即使这在Chrome中正常工作.

所以显然.click()函数是定义和工作,但不是这个元素.

我已经用尽了我的google-foo.这里有一些其他的东西我看到别人提到和尝试:

使用javascript dispatchEvent

var evObj = new CustomEvent('click');
evObj.initEvent('click',true,false);
document.getElementById('menuItemToClick').dispatchEvent(evObj);

这样做会触发点击事件,并将浏览器引导到正确的URL,但它也会导致整个页面重新加载,在chrome和mocha-phantomjs中,从一开始就重新启动测试,将它们放在无限循环中…有没有一种使用这种方式,而不会导致页面重新加载?

使用phantomjs的page.sendEvent()

var elementPosition = $("#menuItemToClick").offset();
page.sendEvent('click',elementPosition.left + 1,elementPosition.top + 1);

如果您将元素的正确坐标传递给本地点击事件,则应发送本地点击事件.我试图让这个工作,但似乎无法从运行的摩卡考试中访问该页面.有没有办法从mocha-phantomjs测试中访问phantomjs页面变量?

任何帮助是极大的赞赏!

解决方法

我回去玩了一段时间,最后得到dispatchEvent工作,而不重置页面,它的工作原理在chrome和mocha-phantomjs!我认为页面重置/重新加载与事件不是特别是一个鼠标事件有关.

我在测试的顶部放置了一个方便的功能

var clickElement = function (el){
    var ev = document.createEvent("MouseEvent");
    ev.initMouseEvent(
      "click",true /* bubble */,true /* cancelable */,window,null,/* coordinates */
      false,false,/* modifier keys */
      0 /*left*/,null
    );
    el.dispatchEvent(ev);
};

现在可以点击我的锚点:

clickElement($("#menuItemToClick")[0]);

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: <span id=&quot...
jQuery 添加水印 <script src="../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...