如何使用Protractor发送POST

时间:2014-11-03 23:22:21

标签: javascript angularjs selenium cucumber protractor

所以,我试图通过Protractor命中一个端点。我已经写了许多相同代码的不同变体,试图让它发挥作用。

所以我使用'request'作为我的http客户端似乎最受欢迎,并找到其他http客户端,并考虑尝试这些,如果我不能让这个工作。

我也用黄瓜和柴如诺。所以运行它的结果是什么。所以,当我运行这个黄瓜测试并且它通过这个函数时,它不执行request.post。它只是继续下一步。控制台中没有显示错误。我使用REST客户端进行GET检查POST是否有效,并注意到它不起作用。 我需要一些帮助来解决它为什么这样做。

它会有所作为如果我将post请求放入其他地方的类中的函数中。我打电话给它发送适当的变量?

以下是代码:

    this.When(/^I test this$/, function (next) {
        var request = require('request');
        var options = {
            headers: {
                'id': 'AQ8WHWC',
                'sessionid': 'XnINW5KDQg=',
                'Accept': 'application/json',
                'Accept-Language': 'en-us',
                'random': 'BS3P5Q'
            },
            form: { "pay_load": [] }
        };
        request.post('http://myurl.com/endpoint/test/', options, callback);

        function callback(error, response, body) {
            if (!error && response.statusCode == 200) {
                var info = JSON.parse(body);
                console.log(info);
            }
        }
browser.sleep(1).then(next)
    });

运行黄瓜测试的控制台输出:

 Scenario: this is a cool test
  # endpoint/test/testing.feature:7
    Given I run this endpoint test
  # endpoint/test/testing.feature:8
    When I test this                                             
  # endpoint/test/testing.feature:9
    Then I see this                                    
  # endpoint/test/testing.feature:10

1 scenario (1 passed)
3 steps (3 passed)
[launcher] chrome passed

Done, without errors.

1 个答案:

答案 0 :(得分:2)

我发现问题是我使用npm请求的语法。

这个东西可能非常挑剔。 我曾经提供过自定义请求选项:request(object,object)

我最终做了以下工作以使其发挥作用:

    var request = require('request');

    var options = {
        method: 'POST',
        url: 'http://myurl.com/endpoint/test/',
        headers: {'id': 'AQ8WHWC',
            'sessionid': 'XnINW5KDQg=',
            'Accept': 'application/json',
            'Accept-Language': 'en-us',
            'random': 'BS3P5Q'
        },
        body: '{ "pay_load": [] }'
    };

    function callback(error, response, body) {
        if (!error && response.statusCode == 200) {
            var info = JSON.parse(body);
            console.log(response);
            console.log(info);
        }
    }
    request(options, callback);
};