0

今晚我在试验 nightmarejs,我想在运行时有一个需要用户输入的步骤。有没有办法让 nightmarejs 允许这样的事情?我修改了 lib 附带的 type() 方法,并且能够停止执行以输入一些文本。脚本甚至完成了,但我没有看到我输入的输入,显示在它应该进入的文本框中。我确定 dom 选择器是正确的,因为当我使用相同的选择器和内置的 type() 方法时,静态文本就在那里。在下面的代码中,prompt(msg) 是来自sync-prompt 的方法这是我写的方法,但它不会更新页面上的元素:

exports.type_async = function(selector, msg, done) {
  this.page.evaluate(function(selector) {
    return document.querySelector(selector);
  }, function(element){
    text = prompt(msg);
    element.text = text;
    done();
  }, selector);
};

我究竟做错了什么?

4

1 回答 1

1

原始type包含element.value = text;页面上下文中的行(在评估内部,但不是结果回调),但您有element.text = text;.

此外,可能应该在提示输入后设置该值。

exports.typeAsync = function(selector, done) {
  var text = prompt('dynamic, blocking input:');
  debug('.type() %s into %s', text, selector);
  this.page.evaluate(function(selector, text) {
    var element = document.querySelector(selector);
    element.value = text;
  }, done, selector, text);
};

它是这样称呼的:

nightmare.typeAsync('#foo')
于 2014-10-24T10:33:23.663 回答