Javascript Phantom.js-在警报框中获取文本
是否可以使用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
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()