簡體   English   中英

量角器HTTP GET請求

[英]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));

我們在beforeEachafterEach使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM