我正在尝试从执行脚本函数中获取一个值,并将其与Expect方法匹配。 由于isSelected不适用于应用程序中使用的许多复选框,因此我必须采用这种方式。 这是我的代码,非常感谢您的帮助。
我尝试将isSelected与这类复选框一起使用,但这不起作用。 下面的代码给我以下错误。 失败:无法读取null的属性“ getText”
exports.verifyRegularCheckboxChecked = function () {
browser.driver.executeScript(function() {
var special_list = $('div > div');
var returnValue = 'itIsTrue';
var label, label_children;
special_list.filter(function(index, elem) {
label = elem.children;
label_children = $(label).children();
label_children.filter(function(nestedIndex, nestedElem) {
if(nestedElem.tagName === 'INPUT') {
if(nestedElem.checked) {
return returnValue;
}
}
});
});
}).then(function (returnValue) {
expect(returnValue.getText()).toBe('itIsTrue');
});
};
HTML代码:
<div class="form-group">
<div class="checkbox">
<label>
<input class="ark-checkbox ng-untouched ng-valid ng-dirty ng-valid-parse"
ng-model="block.properties.milestoneIsVariable.value" type="checkbox">
<span aria-label="ark-checkbox"> ::before </span> use variable
</label>
</div>
</div>
答案 0 :(得分:0)
对于jQuery的filter(function),您需要返回一个布尔值。
exports.verifyRegularCheckboxChecked = function () {
let result = browser.driver.executeScript(function() {
let special_list = $('div > div');
let label, label_children;
let checkedList = special_list.filter(function(index, elem) {
label = elem.children;
label_children = $(label).children();
return label_children.filter(function(nestedIndex, nestedElem) {
return estedElem.tagName === 'INPUT' && nestedElem.checked;
}).length > 0;
});
// return matched Dom element
return checkedList.length > 0 && checkedList.get(0);
}); // end of executeScript
expect(result.getText()).toBe('itIsTrue');
};
实际上,您可以按以下方式简化代码:
exports.verifyRegularCheckboxChecked = function () {
let result = browser.driver.executeScript(function() {
return $('div > div').filter(function(){
return $('input:checked', this).length > 0;
})
.get(0);
});
expect(result.getText()).toBe('itIsTrue');
};
答案 1 :(得分:0)
因此我通过修改我的代码来使其正常工作。
exports.verifyRegularCheckboxChecked = function () {
var result = browser.driver.executeScript(function() {
var returnValue = false;
var special_list = $('div > div');
var label, label_children;
special_list.filter(function(index, elem) {
label = elem.children;
console.log('inner text is: ' + label.textContent);
label_children = $(label).children();
label_children.filter(function(nestedIndex, nestedElem) {
if(nestedElem.tagName === 'INPUT') {
if(nestedElem.checked) {
returnValue = true;
}
}
});
});
return returnValue;
});
result.then(function (value) {
expect(value).toBeTruthy();
});
};