使用.evaluate与nightmare.js一起使用dev工具进行交互

时间:2018-02-14 21:10:12

标签: javascript angularjs google-chrome-devtools electron nightmare

我正在尝试自动化我在devtools中手动执行的进程。在开发控制台中,我将创建一个变量对象:

var api = angular.element(document.body).injector().get('apiFactory')

然后对api对象api.getData(arg)进行调用,然后返回一个对象{}

如何在噩梦的.evaluate函数中获得上面返回的对象,如下所示?

vo(run(arg)) 
   .then(function(result) {
   console.log(result);   
}, function(err) {
    console.log(err);
}); 

var run = function * (arg){ 
   nightmare.goto('https://...')

   var result = nightmare.evaluate((arg) => {
      var api = angular.element(document.body).injector().get('apiFactory')
      return api.getData(arg);     
   },result);

   yield nightmare.end();
};

1 个答案:

答案 0 :(得分:1)

可以安全地假设AngularJS应用程序尚未在检索到进样器时进行自举。

可以为evaluate内的代码提供延迟,手动设置setTimeout或就绪事件监听器:

   var result = yield nightmare.evaluate((arg, done) => {
      angular.element(() => {
        var api = angular.element(document.body).injector().get('apiFactory')
        done(api.getData(arg));
      });
   },result);

或者它可以等待应用程序引导程序:

   var result = yield nightmare.wait('.ng-scope').evaluate((arg) => {
      var api = angular.element(document.body).injector().get('apiFactory')
      return api.getData(arg);     
   },result);

等待ng-scopewon't work in production mode,在这种情况下,应该等待特定于应用程序的选择器。