带有 Protractor/WebDriverJS 元素的 Jasmine 自定义匹配器
Jasmine custom matchers with a Protractor/WebDriverJS element
各位开发者大家好,
我想根据 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
。但是我想让预期的元素被启用。
感谢您的帮助。
不是专家,但我觉得 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();
希望对您有所帮助。
各位开发者大家好,
我想根据 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
。但是我想让预期的元素被启用。
感谢您的帮助。
不是专家,但我觉得 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();
希望对您有所帮助。