带有Protractor / WebDriverJS元素的Jasmine自定义匹配器

时间:2015-10-13 11:10:45

标签: javascript angularjs selenium jasmine protractor

Hello开发人员,

我想基于Protractor / WebDriverJS元素创建自己的自定义匹配器。有人能改进我目前的代码吗?

以下是我想在specs文件中写的内容

var button = element(by.tagName('button'))
expect(button).toBeEnabled();

所以这是我的自定义Jasmine匹配器:

'use strict';

function matcher(util, customEqualityTesters) {
  return {
    compare : function (actual, expected) {
      var result = {};

      expect(actual.isEnabled()).toBeTruthy()

      result.pass = true;

      if (result.pass) {
        result.message = 'Expected element to be disabled';
      }
      else {
        result.message = 'Expected element to be enabled';
      }

      return result;
    }
  };
}

module.exports = matcher;

有没有更好的方法来写它?因为目前,如果我有错误,我会收到以下消息:Expected false to be true。但是我希望启用Expected元素。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

不是专家,但我觉得Jasmine自定义匹配器是将匹配器作为键的对象。所以你必须使用对象键来调用它。但是,您正在对result.pass = true;值进行硬编码,这会导致else在发生故障时永远不会被执行,并且您的语句'Expected element to be enabled.'将永远不会被打印。以下是如何改进它 -

'use strict';

var customMatchers = {
    toBeEnabled: function (util, customEqualityTesters) {
        return {
            compare : function (actual, expected) {
            var result = {};

            result.pass = actual.isEnabled();

            if (result.pass) {
                result.message = 'Expected element to be enabled';
            }
            else {
                result.message = 'Expected element to be disabled';
            }

              return result;
            }
        };
    }
}

以下是如何使用它 -

var button = element(by.tagName('button'))
expect(button).toBeEnabled();

希望它有所帮助。