[英]Protractor HTTP GET request
在我的量角器測試中,我正在嘗試點擊一個端點,該端點將重置當前登錄用戶的所有數據。 現在,我使用普通的舊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塊中使用Protractor函數,因為我現在在瀏覽器上下文中。 即EC
未定義
問題:如何在訪問此端點的同時正確訪問/使用我的ExpectedConditions
(同樣,我目前在beforeAll
塊中使用此功能)?
有幾點需要注意:
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));
我們在beforeEach
和afterEach
使用rest調用。 使用browser.ignoreSynchronization = true;
在您的beforeAll
函數開始時打破角度同步,然后在腳本之后,確保重置browser.ignoreSynchronization = false;
。
例如:
beforeEach(function() {
browser.ignoreSynchronization = true;
browser.executeAsyncScript();
browser.ignoreSynchronization = false;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.