在我的量角器应用程序中,我具有以下方法,该方法应返回boolean
值,具体取决于它是否找到该元素。
async getTheValueOfEntery(entery: string) {
var value = await element(by.xpath(entery))
.isPresent().then((isExist) => {
isExist;
});
return value;
}
但是,问题是,它总是返回undefined
,尽管我确定,它应该返回true
。
那么,我的方法有什么问题?
更新:
实际上,我需要具有一系列调用胖函数,因此,我的函数的最完整版本如下:
async getTheValueOfEntery(entery: string) {
var value = await element(by.xpath(entery))
.isPresent().then((isExist, entery: string) => {
isExist ? element(by.xpath(entery)).getText() : 0;
});
return value;
}
但是,我无法将entery:string
传递给第二个lambda。
答案 0 :(得分:1)
请注意以下事项:
then((isExist)=>{isExist;});
在JavaScript粗箭头功能中,如果用大括号括起来的代码,则需要返回一个值:
const sum = (a, b) => {
return a + b;
}
相反,如果只有一行,则可以同时使用大括号和return
语句:
const sum = (a, b) = a + b;
因此,同样根据您的情况,您可以决定是在return
之前添加isExist
,还是删除大括号。
但是,让我们走的更远,如果您只有一个参数,也可以删除圆括号:
const square = x => x * x;
因此您的代码应如下所示:
.then(isExist => isExist);
但这并不意味着什么!您只是返回输入中得到的参数,它不会更改您的promise值。
最后,您可以通过以下方式简化代码:
async getTheValueOfEntery(entery:string){
return (await element(by.xpath(entery))).isPresent();
}
Ps。最好是用javascript而不是lambda来讨论fat-arrow函数!
答案 1 :(得分:1)
您没有从箭头函数返回任何内容,因此其结果为undefined
。如果您写:
.isPresent().then((isExist, entery: string) => {
isExist ? element(by.xpath(entery)).getText() : 0;
});
然后就好像您要写:
.isPresent().then(function (isExist, entery: string) {
isExist ? element(by.xpath(entery)).getText() : 0;
});
因此您需要添加一个return
:
.isPresent().then((isExist, entery: string) => {
return isExist ? element(by.xpath(entery)).getText() : 0;
});
或删除{}
:
.isPresent().then((isExist, entery: string) => isExist ? element(by.xpath(entery)).getText() : 0);
如果您对value
变量不做任何事情(除了返回变量),那么就不需要使用await
。您可以这样写:
async getTheValueOfEntery(entery: string) {
return element(by.xpath(entery))
.isPresent().then((isExist, entery: string) => {
isExist ? element(by.xpath(entery)).getText() : 0;
});
}
从理论上讲,async
也不是必需的,但它没有害处,它表明此函数将始终返回Promise。
答案 2 :(得分:-1)
从await
返回的值实际上是then
参数。您根本不需要then
。 then
的结果就是返回的undefined
。
var value = await (element(by.xpath(entery))).isPresent()
return value;
此外,我不确定这里有什么异步的。您可能正在等待错误的对象。
var value = await (element(by.xpath(entery))).isPresent()
return value;
或
var ele = await element(by.xpath(entery))
return ele.isPresent()
或
var ele = await by.xpath(entery)
return element(ele).isPresent()
var isExist = await element(by.xpath(entery))
.isPresent()
var value = isExist ? await element(by.xpath(entery)).getText() : 0;
});
return value;
虽然还不清楚您在等什么。