Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Phantom.js-在警报框中获取文本_Javascript_Jquery_Testing_Phantomjs - Fatal编程技术网

Javascript Phantom.js-在警报框中获取文本

Javascript Phantom.js-在警报框中获取文本,javascript,jquery,testing,phantomjs,Javascript,Jquery,Testing,Phantomjs,是否可以使用Phantom.js获取警报框中的文本 var page = require("webpage").create() , assert = require("assert"); page.open("http://www.mysite.com/page", function (status) { page.includeJs("jquery-1.10.2.min.js", function () { var alertText = page.evaluate(funct

是否可以使用Phantom.js获取警报框中的文本

var page = require("webpage").create()
, assert = require("assert");

page.open("http://www.mysite.com/page", function (status) {
  page.includeJs("jquery-1.10.2.min.js", function () {
    var alertText = page.evaluate(function () {
      //This should cause an alert dialog to appear
      $('button[type="submit"]').click();

      //This doesn't work, but is there some equivalent to this?
      return $("alert").val();
    });

    assert.equal(alertText, "Thanks for clicking Submit!");
  });
});

无法通过这种方式从
警报中获取消息(没有名为
的HTML元素,这正是您试图使用jQuery查找的内容)。但是,您可以重新定义
window.alert
以执行其他操作,如登录控制台。然后,您可以使用
onConsoleMessage
查看控制台消息。为了将其与您可以获得的其他控制台消息区分开来,您可以为其指定一个唯一的前缀。我在本例中使用了
警报:

page.evaluate(function() {
    window.alert = function(str) {
        console.log("ALERT:" + str);
    }
});

page.onConsoleMessage(function(message, lineNumber, sourceId) {
    if(/^ALERT:/.test(message)) {
       //do something with message
    }
});
如果您不想使用
onsolemessage
路径,您可以创建自己的隐藏
输入
元素(在重新定义的
警报
中),然后简单地查询该值:

page.evaluate(function() {
    window.alert = function(str) {
        if(jQuery("#alertText").length === 0) {
            jQuery("body").append(jQuery("<input>").attr("id", "alertText").attr("text", "hidden");
        }

        jQuery("#alertText").val(str);
    }
});
page.evaluate(函数(){
window.alert=函数(str){
if(jQuery(“#alertText”).length==0){
jQuery(“body”).append(jQuery(“”).attr(“id”,“alertText”).attr(“text”,“hidden”);
}
jQuery(“#alertText”).val(str);
}
});

然后,在您的代码中,不使用
jQuery(“alert”).val()
,而是使用
jQuery(“alertText”).val()

这样就无法从
alert
获取消息(没有名为
的HTML元素,这是您试图使用jQuery查找的)。但是,您可以重新定义
窗口。alert
执行其他操作,如登录控制台。然后您可以使用
onsolemessage
查看控制台消息。为了将其与您可以获得的其他控制台消息区分开来,您可以为其指定一个唯一的前缀。在本例中,我使用了
alert:

page.evaluate(function() {
    window.alert = function(str) {
        console.log("ALERT:" + str);
    }
});

page.onConsoleMessage(function(message, lineNumber, sourceId) {
    if(/^ALERT:/.test(message)) {
       //do something with message
    }
});
如果您不想使用
onsolemessage
路径,您可以创建自己的隐藏
输入
元素(在重新定义的
警报
中),然后简单地查询该值:

page.evaluate(function() {
    window.alert = function(str) {
        if(jQuery("#alertText").length === 0) {
            jQuery("body").append(jQuery("<input>").attr("id", "alertText").attr("text", "hidden");
        }

        jQuery("#alertText").val(str);
    }
});
page.evaluate(函数(){
window.alert=函数(str){
if(jQuery(“#alertText”).length==0){
jQuery(“body”).append(jQuery(“”).attr(“id”,“alertText”).attr(“text”,“hidden”);
}
jQuery(“#alertText”).val(str);
}
});
然后在您的代码中,您将执行
jQuery(#alertText”).val()
,而不是
jQuery(#alertText”).val()