我想获取用户可以点击的菜单项。
不幸的是,isEnabled
方法始终为我的所有项目返回true
。
这就是我尝试另一种方法的原因。我注意到残疾人,总是有'ui-state-disabled'类。因此,我可以使用以下功能获取所有已禁用的项目:
function getDisabledMenuItems() {
return getCustomGrid().all(by.className('menu-ui')).all(by.className('ui-state-disabled')).all(by.className('menu-item-text'));
}
然后使用以下所有菜单项:
function getAllMenuItems() {
return getCustomGrid().all(by.className('menu-ui')).all(by.className('menu-item-text'));
}
现在我想从getDisabledMenuItems
返回的项目中排除getAllMenuItems
返回的项目。
问题
排除另一个ElementArrayFinder中存在的ElementArrayFinder项的最简单方法是什么?
我试图通过filter
方法做到这一点,如下所示:
const disabledText = getDisabledMenuItems().getText();
const allItems = getAllMenuItems();
allItems.filter(function(elem, index) {
return elem.getText().then(function(text) {
return disabledText.indexOf(text) < 0 ;
});
});
但我的代码不起作用(indexOf does not exists on type Promise<string>
)。
我也想知道最简单的方法是什么。
答案 0 :(得分:1)
由于getDisabledMenuItems().getText()
会返回一个承诺,您必须在then()
中使用其最终值:
const disabledText = getDisabledMenuItems().getText();
const allItems = getAllMenuItems();
const enableItems = allItems.filter(function(elem, index) {
return elem.getText().then(function(text) {
return disabledText.then(function(txts){
return txts.includes(text) === false;
// or use return txts.indexOf(text) < 0;
});
});
});