是否可以使用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!");
});
});
答案 0 :(得分:1)
无法以alert
方式获取消息(没有名为<alert>
的HTML元素,这是您尝试使用jQuery查找的内容)。但是,您可以做的是重新定义window.alert
以执行其他操作,例如登录到控制台。然后,您可以使用onConsoleMessage
查看控制台消息。要将其与您可以获得的其他控制台消息区分开来,您可以为其指定唯一的前缀。在这种情况下我使用了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
}
});
如果您不想使用onConsoleMessage
路线,可以创建自己的隐藏input
元素(在重新定义的alert
中),然后只需查询该值:
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);
}
});
然后在您的代码中,您将执行jQuery("alert").val()
而不是jQuery("#alertText").val()
。