【问题标题】:Testing an event while an ajax call is in progress using Protractor + Angular使用 Protractor + Angular 在进行 ajax 调用时测试事件
【发布时间】:2015-02-24 10:57:50
【问题描述】:

我正在使用量角器 1.7.0 和角度 1.2。

我有一个功能,当我点击一个按钮说“加载结果”时,一个 ajax 请求被触发,同时结果又回来了我看到一个按钮说“取消请求”(要取消正在进行的 ajax 请求,这个按钮会得到收到 ajax 响应时隐藏)。

现在要在量角器中测试它,我正在写这样的东西

//to load the results
element(by.css('#load-results')).click();

//to cancel ongoing ajax request to load results    
element(by.css('.search-cancelled')).then(function(){
  element(by.css('.search-cancelled')).click();
});

它给了我一个错误,说元素不可见。

据我所知,量角器在执行下一条语句之前会等待 Angular 解决其承诺。所以直到它到达这个代码

element(by.css('.search-cancelled')).then(function(){
      element(by.css('.search-cancelled')).click();
    }); 

ajax 调用已返回,这就是元素被隐藏的原因。

有没有办法让量角器在 ajax 请求进行时不等待角度承诺并执行我的代码?

【问题讨论】:

    标签: angularjs protractor


    【解决方案1】:

    看起来你可以这样做:

    $('#load-results').click();
    waitElementToBeShown($('.search-cancelled'));
    $('.search-cancelled').click();
    

    帮助功能代码如下:

    var waitElementToBeShown = function (elm) {
        browser.wait(function () {
            return elm.isPresent();
        },15000);
        browser.wait(function () {
            return elm.isDisplayed();
        },15000);
    };
    

    【讨论】:

    • 你能解释一下你想在这里做什么吗?我试图运行你的代码,但同样的事情也发生在这里。
    • 我试图运行你的代码,但同样的事情也发生在这里。在执行$('#load-results').click(); 之后,量角器等待响应返回,然后再执行waitElementToBeShown。所以本质上它没有任何效果,因为它仅在当前语句完全执行时才执行下一条语句。 Protractor 在内部使用 selenium,它使用这种风格 code.google.com/p/selenium/wiki/WebDriverJs#Control_Flows
    • 如果我的初始帖子正确,您单击某个按钮,然后您会收到其他按钮以取消 AJAX 请求。我在测试中到处都使用相同的模式,并且效果很好。从字面上看,这段代码点击按钮,理想情况下,一旦它点击 DOM 更改并出现新元素,您正在等待它到 1. 呈现在 DOM 中 2. 可点击并点击它
    • 你用的是角度+量角器吗?
    • 是的,我们有 Angular 应用程序和量角器 + jasmine 用于 e2e 测试
    猜你喜欢
    • 2018-12-06
    • 2020-04-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多