【问题标题】:Protractor and $http.post量角器和 $http.post
【发布时间】:2023-03-28 09:03:01
【问题描述】:

我有一个简单的应用程序,我可以在其中添加对话(Q/A)。我已经为它写了测试-

describe('New Survey:', function() {
  it('should be added', function() {
    browser.get('http://127.0.0.1:8090/#/newConversation');
    //picking a user
    element.all(by.css('.form-control')).get(5).click();
    element(by.model('vm.user')).sendKeys('test');
    element(by.repeater('user in vm.users').row(6)).click();
//push some answers
    var inputs = element.all(by.css('.form-control.validated')).each(function(element,index){
      element.sendKeys('test answer');
    });
     //and send it
    element(by.id('submit')).click();
    element(by.css('.confirm')).click()
          browser.waitForAngular();
  });
});

点击.confirm按钮后 这个方法被调用

this.saveSurvey = function(conv) {
        return $http.post('/conv', conv);
    };

但是量角器不会等到它完成,所以实际上没有对话发送到服务器我怎么能让它等到发布完成?

【问题讨论】:

  • 当您向服务器发送 post 请求时,您是否从服务器收到任何响应?
  • 好像没有,请问是什么原因?
  • 它是必须响应的服务器。如果它根本没有发送任何响应,那么您所能做的就是明确等待几秒钟,或者如果有一个元素在发布请求完成时发生变化(如成功通知,或在某处添加的一行文本等) ,你可以等待它发生。
  • 在单击 .confirm 之前添加 browser.pause() 会有所帮助,但我不想以这种方式使用它
  • 我认为您必须对测试添加一些期望,因为现在它实际上没有任何东西可以断言并立即退出。

标签: javascript angularjs jasmine http-post protractor


【解决方案1】:

您可以等待click() 函数执行并通过等待其承诺返回来发送您的发布请求。方法如下-

element(by.id('submit')).click().then(function(){
    element(by.css('.confirm')).click().then(function(){
        browser.sleep(2000);
        //If your server returns a response in some way that the conversation is saved, you can verify it here.
    });
});

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多