1

我正在编写噩梦脚本来测试网站。问题在于页面事件。有一个脚本

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

噩梦剧本是

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);
  }

当运行时node test.js

它打开浏览器窗口并单击按钮。但不知道如何在确认弹出窗口中按“确定”按钮,以便我可以进行下一个测试。“确定”按钮不需要响应,只需单击确认窗口中的“确定”按钮即可。

很感谢任何形式的帮助。

谢谢

4

1 回答 1

0

默认预加载脚本会覆盖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);
  }
于 2016-10-08T17:45:37.917 回答