我使用PhantomJS 2点击页面的元素。但是,我不知道点击这些元素是否会触发事件(例如,页面加载)。PhantomJS 2:检测没有触发事件的点击
我希望能够处理这两种情况下:
当一个元件上的点击触发页面加载,然后我想等到新的页面已经被加载。
当点击不触发事件时,我希望能够识别(无需等待很长的超时)。
在PhantomJS 1,我可以简单地使用一个封闭件的这样的:
function click(page, elem, callback) {
var loading = false;
page.set('onLoadStarted', function() {
loading = true;
});
page.set('onLoadFinished', function() {
callback('click triggered page load');
});
triggerClick(page, elem);
setTimeout(function() {
if (! loading) {
callback('click did not trigger page load');
}
}, 100);
}
在这里,我闭在loading
可变其充当之间的“通信信道”事件处理程序和函数setTimeout
。
万一点击触发网页加载时,
onLoadFinished
处理程序将调用回调的页面加载后。如果点击不触发页面加载,
setTimeout
中的函数将在100ms(这是可接受的)后调用回调函数。
此代码已被PhantomJS下工作井1
在PhantomJS 2遗憾的是,对于onLoadStarted
和onLoadFinished
事件处理程序不能访问的loading
变量(即他们不工作的关闭了,因为它似乎)。
所以现在我想知道我如何能够在PhantomJS 2中实现相同的行为。任何想法?
PS:我知道,我必须通过page.property(...)
在PhantomJS 2安装,而不是使用page.set(...)
像的事件处理程序PhantomJS 1
编辑:我使用的节点包幻象(https://www.npmjs.com/package/phantom)作为节点& phantomjs之间的桥梁。
没有'page.set'在PhantomJS(1或2)。你在node.js和PhantomJS之间使用某种桥梁吗? –
嗯,是的确 - 我正在使用节点软件包phantom(https://www.npmjs.com/package/phantom)。显然忘了提及;)。但是,我想知道在哪种方式可能会涉及到我上述问题的解决方案...这实际上是这个节点桥而不是phantomjs本身的问题吗? – Oliver