当添加回调函数时,phantomJS的click()不起作用

phantomJS click() not working when added a callback function

本文关键字:click 不起作用 phantomJS 添加 回调 函数      更新时间:2023-09-26

我有这个脚本测试jquery的click()功能在phantomJS。

var page = require('webpage').create(),
address;
address="https://jsfiddle.net/t8atxcfL/";
page.onConsoleMessage = function(msg) {
  console.log('eval- ' + msg);
};
page.open(address, function(status){
    if(status==="success"){
        console.log("Page loaded");
        page.viewportSize={width:1920, height:1080};
        page.render("before.png");
        page.includeJs("//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function(){
            console.log("executing jquery");
            var toFocus = page.evaluate(function(){
                console.log("getting iframe name...")
                return document.getElementsByTagName("iframe")[0].name;
            });
            page.switchToFrame(toFocus);
            page.evaluate(function() {
                console.log($("#par").text());
                $("#par").click();
                console.log($("#par").text());
            });
            page.viewportSize={width:1920, height:1080};
            page.render("after.png");
            phantom.exit();
        });
    }
});

这个版本似乎工作得很好,输出是:

user@home$ phantomjs chooseframe.js 
Page loaded
executing jquery
eval- getting iframe name...
eval- 
Before clicking...
eval- I was clicked

问题是当我用$("#par").click(function(){console.log("I am now clicking")});代替$("#par").click();

则输出变为

user@home$ phantomjs chooseframe.js 
Page loaded
executing jquery
eval- getting iframe name...
eval- 
Before clicking...
eval- 
Before clicking...

问题是,即使回调函数为空,如$("#par").click(function(){});,即使我删除phantom.exit()行,输出保持不变,无论我等待多久。

谁能告诉我如何使.click()工作的预期方式,或者为什么它不能工作?

$("#par").click();触发链接的现有点击处理程序,而后面的示例设置了一个新的点击处理程序,但没有点击元素来触发点击处理程序。

只需确保在添加click处理程序后单击:

$("#par").click(function() {
    console.log("I am now clicking");
});
$("#par").click();