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

标签 javascript angularjs selenium jasmine protractor

各位开发人员大家好,

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

这是我想在规范文件中写入的内容

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 元素。

感谢您的帮助。

最佳答案

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

'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();

希望有帮助。

关于javascript - 带有 Protractor/WebDriverJS 元素的 Jasmine 自定义匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33101139/

相关文章:

c# - 通过 AngularJS 将 JSON 发布到 Asp.net

java - 我在 xml 文件中传递参数,但系统仍将其值设为 param-val-not-found

python-3.x - Cloudflare 和 Chromedriver - cloudflare 区分 chromedriver 和正版 chrome?

javascript - 如何在 DOJO 中将一个 Widget 添加到另一个 Widget?

javascript - 显示 “No matches found” 或隐藏 DIV 结果(AJAX 和 MySQL)

javascript - 使用 Html5 文件 api 确定未知内容类型

angularjs - 在状态更改 + 后退按钮上使用 angular ui-router 向左/向右滑动(用于移动设备)

javascript - 输入类型 'number' 的 ng-model 不工作

java - Selenium+Firefox 到 Selenium+PhantomJS

javascript - 加载功能,更新动态内容