【问题标题】:protractor + cucumber waits and timesout without executing the full testprotractor + cucumber 等待和超时而不执行完整测试
【发布时间】:2018-07-11 17:17:49
【问题描述】:

我正在使用 Protractor 和 CucumberJS 实施 E2E 测试。我面临的问题是它只执行第一步并等到它超时。仅在使用页面对象时才会出现此问题。

这是我的功能文件:

场景:验证添加事件权重 鉴于添加优先计划 并添加事件权重类型 用户创建事件 然后应该正确显示事件权重。

页面对象文件:

var createincidentpage = function(){    

    this.priorityAdd = function(userdetail, callback) {
        browser.ignoreSyncronization = true;
        incidentSection.click()

        .then(function(){
            return PPPage.click();
        }).then(function(){
            browser.switchtTo().frame(0);
            return newElement.click();
        }).then(fucntion(){
            return newppname.sendkeys("xyz");
        }).then(function(){
            return fromDatePicker.click();
        }).then(function(){
            return gotoTodayElement.click();
        }).then(function(){
            return editableOk.Click();
        }).then(function(){
            return toDatePicker.click();
        }).then(function(){
            return selDateinMOnth.click();
        }).then(function(){
            SubmitButton.click();
            return callback();
        });
    };

module.exports =  new createincidentpage();

我的步骤文件:

var createincidentpage = require ('../pages/createincidentpage.js');

Given('priority program add' , function (callback) {
    createincidentpage.priorityAdd(function callback(){
       callback();
    }):
});

【问题讨论】:

    标签: protractor pageobjects cucumberjs


    【解决方案1】:

    因为您没有在priorityAdd() 中调用callback()

    为了更清楚,我在下面的代码中重命名了一些变量。

    你必须调用callback()来自Given(),否则运行时无法结束Given()并等到你遇到超时。

    您可以直接在Given() 中调用callback(),或者像您一样将callback 传递到嵌套函数中,然后在嵌套函数中调用它。

    var createincidentpage = function(){    
    
        this.priorityAdd = function(userdetail) {
            browser.ignoreSyncronization = true;
            incidentSection.click()
    
            PPPage.click();      
            browser.switchtTo().frame(0);
            newElement.click();
            newppname.sendkeys("xyz");
            fromDatePicker.click();
            gotoTodayElement.click();
            editableOk.Click();
            toDatePicker.click();
            selDateinMOnth.click();
            return SubmitButton.click();
        };
    
    module.exports =  new createincidentpage();
    

    步骤文件:

    var createincidentpage = require ('../pages/createincidentpage.js');
    
    //Option 1, invoke `callback`
    Given('priority program add', function(callback) {
        createincidentpage.priorityAdd().then(function(){
           return callback();
        });
    });
    
    // Option 2, return a promise like object, recommend to use option 2
    Given('adding incident weight type', function(){
        return createincidentpage.priorityAdd();
    });   
    

    【讨论】:

    • 我如前所述返回了回调(),但现在我看到一个新错误:“超出堆栈的最大大小”。这就是我的函数现在的样子:
    • this.priorityAdd = function (callback){ //执行导航 ..clicks & add values 最后提交 editableOK.click(); }).then(function(){ ppSubmitButton.click(); return callback(); // 我在这里返回什么,因为我没有断言任何东西 }); };步骤文件: Given('优先程序类型被添加' , function(callback){ createIncpage.priorityAdd( function callback(){ callback(); }); });
    • 谢谢你。我更新了你提到的但我现在看到一个新的错误:“最大堆栈超出”。此外,由于我没有在函数 priorityAdd() 中声明任何内容——我不确定除了“return callback()”之外要返回什么。
    • 请用您的代码更新priorityAdd()。不要留空,这样我就可以知道如何修改你的真实代码。错误:“超出堆栈的最大大小”表明您的代码陷入死循环。不要将priorityAdd()的代码放在评论中,将其添加到您的问题正文中。
    • 更新了我当前的代码,错误是“超出堆栈的最大大小
    猜你喜欢
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多