在我的 Protractor 测试中,我试图点击一个端点,该端点将为当前登录的用户重置所有数据。现在,我正在使用普通的旧 javascript 在 beforeAll
中命中该端点,并且成功命中它,但是现在我的测试在页面刷新之前执行导致它们失败。这是我当前的代码:
var EC = protractor.ExpectedConditions,
el = element(by.css('body div.modal-x'));
browser.executeAsyncScript(function() {
var inj = angular.element(document.body).injector();
var reHTTP = inj.get('reHTTP');
var myService = inj.get('myService');
var someVar = myService.getCurrent().definition.userName;
console.log(someVar); // works
reHTTP.get('/app/' + someVar + '/reset').then(function () {
// console.log('i am here'); // this works
// alert('Success!'); // this works
return browser.wait(EC.visibilityOf(el)); // this does not work
});
});
问题:我无法在该 executeScript block 中使用 Protractor 函数,因为我现在处于浏览器上下文中。即 EC
未定义
问题:我如何才能正确访问/使用我的ExpectedConditions
同时也达到这个端点(同样,我目前正在 beforeAll
block )?
一些注意事项:
- 如果我不使用
browser.executeAsyncScript
那么angular
是未定义的,我无法访问服务(或者我找不到其他方法)< - 使用
executeScript
(而不是 AsyncScript)比异步脚本失败得更快
有什么想法吗?
最佳答案
executeAsyncScript
方法需要调用回调函数。您可以在请求返回结果后调用它:
var EC = protractor.ExpectedConditions,
el = element(by.css('body div.modal-x'));
browser.executeAsyncScript(function(callback) {
var inj = angular.element(document.body).injector();
var reHTTP = inj.get('reHTTP');
var myService = inj.get('myService');
var someVar = myService.getCurrent().definition.userName;
console.log(someVar); // works
reHTTP.get('/app/' + someVar + '/reset').then(function () {
callback();
});
});
browser.wait(EC.visibilityOf(el));
关于javascript - Protractor HTTP GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37349456/