我通过 Protractor 使用 webdriver 断言 html 表中特定行的内容。我有以下代码,它可以正常工作,但看起来很糟糕。我想要有关如何使用 Promise 更好地组织此代码的建议;特别是,我想更明显地表明此代码分为 3 个部分:
- 在页面上查找 td 包含指定
matchText
的行 - 检查是否只有一行匹配,并使用有用的调试信息处理错误情况
- 检查该匹配行中 td 的文本内容是否符合预期
有没有办法可以更好地组织它,使其更具可读性,也许可以通过链接 promise 或其他方式?
browser.findElements(by.xpath("//td[text() = '" + matchText + "']/..")).then(function(trs) {
if (trs.length == 0) {
throw 'Unable to find td element equal to ' + matchText
} else if (trs.size > 1) {
protractor.promise.all(trs.map(function(tr){return tr.getInnerHtml()})).then(function(trsInnerHtml) {
throw 'Matched multiple td elements for ' + matchText + ':' + trsInnerHtml;
})
} else {
trs[0].findElements(by.tagName('td')).then(function(tds) {
protractor.promise.all(tds.map(function(td) {return td.getText()})).then(function(tdContent){
expect(tdContent).toEqual(expectedContent);
})
});
}
});
最佳答案
是的,您可以unwrap the promise callbacks从非抛出情况到链式版本:
browser.findElements(by.xpath("//td[text()='" + matchText + "']/..")).then(function(trs) {
if (trs.length == 0) {
throw 'Unable to find td element equal to ' + matchText
} else if (trs.size > 1) {
return protractor.promise.all(trs.map(function(tr) {
return tr.getInnerHtml()
})).then(function(trsInnerHtml) {
throw 'Matched multiple td elements for ' + matchText + ':' + trsInnerHtml;
});
} else {
return trs[0].findElements(by.tagName('td'));
}
}).then(function(tds) {
return protractor.promise.all(tds.map(function(td) {return td.getText()}));
}).then(function(tdContent){
expect(tdContent).toEqual(expectedContent);
});
关于javascript - 以惯用方式组织 javascript webdriver Promise 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28972060/