打破nodejs中的循环
我有以下设置代码
var ele = element(by.model(xpath)); var option = ele.isDisplayed().then(function(found) { ele.all(by.tagName('option')).then(function(options) { options.some(function(option) { option.getText().then(function doesOptionMatch(text) { if (text == data.trim()) { logger.debug("PASS--" + data.trim() + "--option selected"); return "PASS"; //not working } if (text != data.trim()) logger.debug("FAIL--" + data.trim() + "--option is Not selected"); }); }); }); }, function(err) { logger.debug("FAIL--Exception caught in verifyDropdownSelectedValue--" + err); });
并且我想让控件脱离写入return语句的循环,但是它不起作用并继续迭代。 这里是循环部分,当我返回一个真值时不会退出
options.some(function(option) { option.getText().then(function doesOptionMatch(text) { if (text == data.trim()) { logger.debug("PASS--" + data.trim() + "--option selected"); return "PASS"; //not working } if (text != data.trim()) logger.debug("FAIL--" + data.trim() + "--option is Not selected"); }); });
根据Array.some()
的文档 ,如果callback函数返回true,它将退出循环
some()为数组中的每个元素执行一次callback函数,直到findcallback函数返回一个真值(在转换为布尔值时变为true)。 如果find这样的元素,some()会立即返回true。 否则,some()返回false
你的some - callback function
不会返回true,事实上它不会返回任何东西。 即使return "PASS"
值是为函数doesOptionMatch
而不是function(option)
,这是callbacksome()
我将代码更改为类似下面的代码,通过getText()
值Array进行迭代,并在匹配时返回true。 它按预期工作
var ele = element(by.tagName('select')); var option = ele.isDisplayed().then(function(found) { ele.all(by.tagName('option')).getText().then(function(textValues) { textValues.some(function(textValue) { if (textValue == data.trim()) { logger.debug("PASS--" + data.trim() + "--option selected"); return true; } if (textValue != data.trim()) logger.debug("FAIL--" + data.trim() + "--option is Not selected"); }) }) });
- 所有使用Angular 2(+)和Node / Express服务器的TypeScript项目设置
- 通过咕噜开始量angular器
- 运行量angular器testing接收错误“ReferenceError:模块未定义”
- ng安装npm后发生错误
- 错误:EPERM无法安装@ angular / cli
- 量angular器:使用浏览器或browser.driver方法?
- 量angular器debugging模式给出“致命错误:CALL_AND_RETRY_LAST分配失败 – 进程内存不足”
- Angular2 + TypeScript + moment.js => locale并不都在那里(只是'en')
- npm找不到js文件