1

是否可以使用 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!");
  });
});
4

1 回答 1

1

没有办法通过这种方式获取消息alert(没有名为 的 HTML 元素<alert>,这是您试图使用 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元素(在 redefined 中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().

于 2013-11-06T21:30:29.080 回答