【问题标题】:Protractor/Jasmine Error : Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVALProtractor/Jasmine 错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调
【发布时间】:2019-10-12 09:18:52
【问题描述】:

我遇到了这个问题,我执行量角器测试却发现它失败了。现在问题不在于实际功能失败,而在于默认超时间隔。代码运行良好,在网页上执行所有操作,当您期望出现绿点时,它就会出错。

在有人将其标记为重复之前,我只想告诉您,我已经尝试了以下方法来解决其他类似问题的答案。

  1. 在“it”块中包含参数并在测试后调用该参数。
  2. 将 conf.js 文件中的 default_timeout_interval 更改为 30s。
  3. 尝试在最后一个函数中使用 Async/await 来等待 promise 得到解决。

我不仅想找到这个问题的答案,而且如果有人能给我解释一下 Protractor 到底想在这里传达什么。对于 JavaScript 和 Protractor 的新手来说,这似乎是一个非常模糊的信息。

以下是我的规范文件:

describe("Validating Booking for JetBlue WebApplication", function(){


    var firstPage = require("../PageLogic/jetBlueHomePage.js");
    it("Validating One Way Booking", function(pleaserun){

        firstPage.OneWayTrip();
        firstPage.EnterFromCity("California");
        firstPage.EnterToCity("New York");
        firstPage.SelectDepartureDate();
        firstPage.searchFlights();
        pleaserun();
    });

});

下面是我的页面文件:

var homePage = function(){

    this.OneWayTrip = function(){
        element(by.xpath("//label[text()=' One-way ']/parent::jb-radio/div")).click();
    }

    this.EnterFromCity = function(FromCityName){
        element(by.xpath("//input[@placeholder='Where from?']")).clear();
        element(by.xpath("//input[@placeholder='Where from?']")).sendKeys(FromCityName);
        browser.sleep(3000);
        element(by.xpath("//ul[@id='listbox']/li[1]")).click();
    }

    this.EnterToCity = function(ToCityName){
        element(by.xpath("//input[@placeholder='Where to?']")).clear();
        element(by.xpath("//input[@placeholder='Where to?']")).sendKeys(ToCityName);
        browser.sleep(3000);
        element(by.xpath("//ul[@id='listbox']/li[1]")).click();
        browser.sleep(3000);
    }

    this.SelectDepartureDate = function(){
        element(by.xpath("//input[@placeholder='Select Date']")).click();
        browser.sleep(3000);
        element(by.xpath("//span[text()=' 24 ']")).click();

    }

    this.NumberOfPassengers = function(){
        element(by.xpath("//button[@pax='traveler-selector']")).click();

    }

    this.searchFlights = async function(){
        await element(by.buttonText('Search flights')).click();    
    }

};

module.exports = new homePage();

下面是 Conf.js 文件:

exports.config = {
    directConnect: true,
    specs:["TestSpecs/jetBlueBookingTest.js"],
    onPrepare: function(){
        browser.get("https://www.jetblue.com/");
        browser.manage().window().maximize();
    },
    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000,
        isVerbose: true,
        includeStackTrace: true,
    }
};

寻求所有量角器专业人士的帮助,以帮助我获得这个解决方案,并希望让我理解这个概念。

【问题讨论】:

  • 什么是pleaserun()。更新相同的代码
  • 量角器处理承诺的默认方式称为控制流,您当前正在使用它。启用控制流时不应使用async/await,因为这可能导致意外行为。您能否确认您看到在 30 秒默认超时期限仍在使用时删除 async/await 的相同行为
  • 嗨,Madhan,从这个答案中引用了它:stackoverflow.com/questions/22604644/…
  • 您好 DublinDev,您好,感谢您的来信。我尝试了这种方法,它今天奏效了。但是前几天我也尝试这样做,但它不起作用,这就是为什么我也添加了等待/异步。如果您能帮助我了解何时使用哪一个,那就太好了。

标签: jasmine protractor


【解决方案1】:

该消息表示在浏览器中运行了一个异步脚本,并且它没有在预期的时间限制内返回结果。如果您可以共享完整的错误堆栈,那将很有用,根本原因可能会在其中更深入地提及

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 2019-09-21
    • 2018-11-21
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多