【问题标题】:Protractor/Javascript - Reference syntax to pass function into a value for expect clauseProtractor/Javascript - 将函数传递给期望子句的值的参考语法
【发布时间】:2017-12-18 11:03:02
【问题描述】:

量角器和 Javascript 的新手,所以请放轻松。在我使用 expect 子句之前,谁能告诉我在函数中(在我的测试规范中)调用以下页面对象的额外行的语法?

页面对象中的方法/功能:

this.getHeaderText = function(){
  element.all(by.css('.ag-header-cell-text'))
    .map(function(header){
        return header.getText()
    }).then(function(headers){
    if (headers.toEqual(['Publisher Name', 'IpAddress', 'AddedDate', 'Delete Ip']));
    return 1;
  });
};

为期望调用测试规范:

it('All headers are present', function(){
// Need syntax here for reference to pass PO function into a value to call below
   expect(publisher_whitelist_page.getHeaderText.getText().toEqual(1));
 });
});   

因此,我收到以下错误 - 失败:publisher_whitelist_page.getHeaderText.getText 不是函数

再次感谢和欢迎任何帮助或建议!

谢谢!

科斯蒂

【问题讨论】:

    标签: javascript protractor pageobjects


    【解决方案1】:

    用下面的 sn-p 修改你的代码。

    pageObject.js 文件:

    this.getHeaderText = function(){
        return element.all(by.css('.ag-header-cell-text')).getText();
    }
    

    spec.js 文件:

    it('All headers are present', function(){
       expect(publisher_whitelist_page.getHeaderText()).toEqual(['Publisher Name', 'IpAddress', 'AddedDate', 'Delete Ip']);
    });   
    

    【讨论】:

    • 修改如上,依旧报错:× All headers are present - Failed: Cannot read property 'toEqual' of undefined
    • 我的错!我忘了在getHeaderText() 方法中添加return 语句。我已经更新了我的答案,再试一次!
    【解决方案2】:

    您的页面对象函数有一些问题。

    this.getHeaderText = function(){
      return element.all(by.css('.ag-header-cell-text'))
        .map(function(header){
            return header.getText()
        }).then(function(headers){
        if (headers.toEqual(['Publisher Name', 'IpAddress', 'AddedDate', 'Delete Ip']));
        return 1;
      });
    };
    

    您不必再次调用 .getText()。

    像这样试试。

    expect(publisher_whitelist_page.getHeaderText()).toEqual(1);
    

    如果你还没有,请告诉我。

    首先使用console.log检查页面对象中标题的值是什么。像这样
    EDIT

    this.getHeaderText = function(){
      return element.all(by.css('.ag-header-cell-text'))
        .map(function(header){
            return header.getText()
        }).then(function(headers){
        console.log('data', headers, typeof headers);
      });
    };
    

    更新 2

    this.getHeaderText = function(){
          return element.all(by.css('.ag-header-cell-text'))
            .map(function(header){
                return header.getText()
            }).then(function(headers){
            if(JSON.stringify(headers)==['Publisher Name', 'IpAddress', 'AddedDate', 'Delete Ip'])
    return 1;
          });
        };
    

    评论我你得到了什么

    【讨论】:

    • 当我使用上述方法时不会出现以下错误:元素检查所有标题都存在 - 预期未定义等于 1。 - 失败:headers.toEqual 不是函数
    • 您是否在规范文件中正确包含了页面对象文件。例如:通过使用 require
    • 是的,我在测试规范文件的顶部有: var login_page = require('../Pages/login_page.js');
    • 用编辑后的答案再次尝试,仍然得到:元素检查所有标题都存在 - 失败:headers.toEqual 不是函数
    • 告诉你在控制台得到了什么。就像我在上面的回答中告诉你的那样。编辑标题后
    猜你喜欢
    • 2010-09-28
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多