簡體   English   中英

量角器測試無法使用戶會話保持活動狀態

[英]Cannot keep user session alive on protractor test

我正在使用Protractor在我的應用程序上進行e2e測試。

故事:對於特定的用例,我需要確保表上的項目數與API響應相匹配。 我了解到可以使用“請求”進行http調用並檢索信息。 我需要在瀏覽器會話中成為經過身份驗證的用戶才能檢索信息。

問題:成功登錄后,我嘗試獲取項目列表,但得到401響應(“沒有可用的用戶會話”)。

一些材料:

var request = require('request');
var querystring = require('querystring');
app.createSession = function() {
    var formData = querystring.stringify({
        email: browser.params.user.admin.email,
        password: browser.params.user.admin.password
    });

    request({
        url: "https://MY_API_DOMAIN/auth",
        method : 'POST',
        headers: [
        {
        name: 'Accept',
        value: 'application/x-www-form-urlencoded'
        }
        ],
        body: formData
    }, function(err, response, body) {
        console.log('FIRST:', body); //returning 200 ALL FINE
        request({
            url: "https://MY_API_DOMAIN/api/v1/auth",
            method : 'GET',
            withCredentials: true,
            headers: [{
                  name: 'Accept',
                  value: 'application/json'
            }]
        }, function(err, response, body) {
            console.log('SECOND:', body); //returning 401
        });
    });
};

如果您需要更多信息,請告訴我。 當我使用Selenium在HTML上模擬登錄時,一切正常,並且正在提取項目。 問題是在我的輔助函數中處理HTTP請求時。

您可以使用Protractor Promise和ControlFlow來將異步調用轉換為順序執行,並強制框架等待,直到所有Promise被解決並且流程完成為止。 為了實現這一點,所有異步功能都必須返回一個promise,該promise將在以后解決。

該代碼將變為:

 it ("expect to call all functions", function() { createSession = function() { var defer = protractor.promise.defer(); var formData = querystring.stringify({ email: browser.params.user.admin.email, password: browser.params.user.admin.password }); request({ url: "https://MY_API_DOMAIN/auth", method : 'POST', headers: [ { name: 'Accept', value: 'application/x-www-form-urlencoded' } ], body: formData }, function(err, response, body1) { console.log('FIRST:', body1); //returning 200 ALL FINE request({ url: "https://MY_API_DOMAIN/api/v1/auth", method : 'GET', withCredentials: true, headers: [{ name: 'Accept', value: 'application/json' }] }, function(err, response, body2) { defer.fulfill({body1: body1, body1: body2}); //or defer.reject() console.log('SECOND:', body2); //returning 401 }); }); return defer.promise; }; var flow = protractor.promise.controlFlow(); flow.execute(createSession); flow.execute(function(){ console.log("All requests were resolved"); }) }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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