我正在尝试自动化我在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();
};
答案 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-scope
类won't work in production mode,在这种情况下,应该等待特定于应用程序的选择器。