javascript - Protractor :使用 api 调用的结果

标签 javascript ajax http promise protractor

我创建了一个小型 API 来动态生成测试数据。每次调用都会创建一个新用户并返回创建的数据。

要加载数据,我使用包 request:

var flow = protractor.promise.controlFlow();
var result = flow.execute(function() {
    var defer = protractor.promise.defer();
    request('http://localhost/test/recipe/person', function (error, response, body) {
        if (!error && response.statusCode === 200) {
            defer.fulfill(JSON.parse(body));
        }
    });
    return defer.promise;
});

要使用检索到的数据,我必须解决 promise 并在回调中继续执行测试脚本:

result.then(function(data) {
    element(by.model('username')).sendKeys(data.person.email);
    element(by.model('password')).sendKeys('test');
    $('button[type="submit"]').click();
});

我不喜欢这种回调处理以及它可能导致的 hell 。除此之外, Protractor 非常善于隐藏这种困惑的回调处理。所以,问题是:

如何使用异步调用的结果?

最后我想执行如下代码:

var flow = protractor.promise.controlFlow();
var result = flow.execute(function() {...});

element(by.model('username')).sendKeys(result.person.email);
//...

有什么想法吗?

最佳答案

您可以使 http 请求同步 - 在大多数情况下,这是一件坏事。
或者,您可以将回调插入到执行函数中:

var flow = protractor.promise.controlFlow();
var result = flow.execute(function() {
    var defer = protractor.promise.defer();
    request('http://localhost/test/recipe/person', function (error, response, body) {
        if (!error && response.statusCode === 200) {
            defer.fulfill(JSON.parse(body));
        }
    });

    defer.promise.then(function(data) {
       element(by.model('username')).sendKeys(data.person.email);
       element(by.model('password')).sendKeys('test');
       $('button[type="submit"]').click();
    });

    return defer.promise;
});

但结果将是一个 promise 。

关于javascript - Protractor :使用 api 调用的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23705923/

相关文章:

http - 如何在ElasticSearch中为两种类型创建映射?

php - Web服务器如何处理HTTP POST

Javascript beforesend 函数在所有 "add to cart"按钮上错误显示

javascript - 合并重叠的日期范围

python - 进行 AJAX 调用以将下拉值传递给 python 脚本

php - 停止直接访问 (.htaccess) 并允许对子文件夹的 ajax 请求

http - 将具有相同 url 路径的所有请求动态重定向到同一上游服务器

javascript - document.style.getPropertyValue 与 document.defaultView.ComputedStyles

javascript - Onclick 一个 Div

javascript - 在 ajax 调用不起作用后 Yii 从 Controller 操作重定向