如何使用nightmarejs页面事件

时间:2016-10-06 02:49:55

标签: node.js nightmare browser-testing

我正在编写恶梦剧本以测试网站。问题出在页面事件上。有一个脚本



    <button id="btn" onclick="myFunction()">Try it</button>
    <script>
    function myFunction() {
    confirm("Press a button!");
    }
    </script>
&#13;
&#13;
&#13;

并且恶梦剧本是

&#13;
&#13;
var Nightmare = require('nightmare');


const path = require('path');

var nightmare = Nightmare({ 
  show: true,
  webPreferences: {
    preload: path.resolve("pre.js")
    //alternative: preload: "absolute/path/to/custom-script.js"
  } 
})

var confirm = 'confirm';
nightmare.on('page', function(confirm, message, response){
  return true;
});

nightmare  
  .goto('http://localhost:3000/index.html')  
  .click('#btn')
  .wait(1000)
  .evaluate(function () {
    return "just value";//document.querySelector('#main .searchCenterMiddle li a').href
  })
  .end()
  .then(function (result) {
    console.log(result)
  })
  .catch(function (error) {
    console.error('Search failed:', error);
  });

  function testing(arg){
    console.log(arg);
  }
&#13;
&#13;
&#13;

node test.js

一样运行

打开浏览器窗口并单击按钮。但是不知道如何按“确定”。确认弹出按钮,以便我可以进行下一次测试。 &#39; OK&#39;不需要回复。按钮只需要点击“确定”即可。确认窗口中的按钮。

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

default preload script会覆盖window.promptwindow.alertwindow.confirm。您已使用自定义脚本覆盖默认脚本。如果您的自定义预加载脚本没有重现默认脚本的行为,那么您所拥有的将不起作用。

为了完整性,这是来自默认预加载脚本的剪辑,该脚本显示window方法覆盖以及用于连接事件的IPC消息:

  // overwrite the default alert
  window.alert = function(message){
    __nightmare.ipc.send('page', 'alert', message);
  };

  // overwrite the default prompt
  window.prompt = function(message, defaultResponse){
    __nightmare.ipc.send('page', 'prompt', message, defaultResponse);
  }

  // overwrite the default confirm
  window.confirm = function(message, defaultResponse){
    __nightmare.ipc.send('page', 'confirm', message, defaultResponse);
  }