exb*_*dha 8 javascript testing callback protractor
我正在编写一个Protractor测试,必须等待一个元素属性具有非空值,然后我想将该值返回给调用函数.事实证明这比我预期的要难得多!
我能够正确地安排一个browser.wait()
命令来等待元素属性具有非空值,并且我已经验证了这个值实际上是我期望进入回调函数的内容,但由于某种原因,我不是能够将该值返回到回调函数之外并返回到其余的测试代码.
以下是我的代码的样子:
function test() {
var item = getItem();
console.log(item);
}
function getItem() {
var item;
browser.wait(function() {
return element(by.id('element-id')).getAttribute('attribute-name').then(function(value) {
item = value;
// console.log(item);
return value !== '';
});
});
return item;
}
Run Code Online (Sandbox Code Playgroud)
我可以告诉我执行的顺序并不像我预期的那样,因为当我取消注释console.log()
回调函数中的调用时,我看到打印出的预期值.但是,test()
函数中的相同调用会打印'undefined'.
这里发生了什么?我错过了什么?如何正确地从回调函数中获取属性值?
我感谢您的帮助.
ale*_*cxe 12
我不会将wait和getting属性部分组合在一起 - 逻辑上这些是两个独立的东西,将它们分开:
browser.wait(function() {
return element(by.id('element-id')).getAttribute("attribute").then(function(value) {
item = value;
// console.log(item);
return value !== '';
});
});
element(by.id('element-id')).getAttribute("attribute").then(function (value) {
console.log(value);
});
Run Code Online (Sandbox Code Playgroud)
请注意,您可以通过以下方式简化等待条件:
var EC = protractor.ExpectedConditions;
var elm = $('#element-id[attribute="expected value"]');
browser.wait(EC.presenceOf(elm), 5000);
elm.getAttribute("attribute").then(function (value) {
console.log(value);
});
Run Code Online (Sandbox Code Playgroud)
仅供参考,您可能已经解决了当前的问题deferred
:
function test() {
getItem().then(function (value) {
console.log(value);
});
}
function getItem() {
var item = protractor.promise.defer();
browser.wait(function() {
return element(by.id('element-id')).getAttribute('attribute').then(function(value) {
var result = value !== '';
if (result) {
item.fulfill(value);
}
return result;
});
});
return item.promise;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26020 次 |
最近记录: |