您如何将 element.getAttribute() 的值与量角器中的字符串进行比较?
How would you compare the value of element.getAttribute() to a String in protractor?
使用量角器和打字稿,我希望能够将 element.getAttribute("value")
的结果值与字符串进行比较,以验证文本框中的文本是否已成功保存。 getText()
在这种情况下不起作用,因为输入到字段(可编辑文本框)中的文本不会保存为元素的文本属性。这是我的方法:
async getName(option) {
if(option == this.name.getAttribute("value").toString()){
return true;
}
else{
return false;
}
}
这总是 returns 错误,即使传递了正确的值。但是我知道 name.getAttribute("value")
正在返回正确的值,因为当我将结果输出到控制台时,它显示的是正确的值。
当我从上述方法中输入 option
作为 string
时,出现以下错误:This condition will always return 'false' since the types 'String' and '() => string' have no overlap.ts(2367)
。我假设这与 protracor 返回承诺有关,但我不确定是否有任何其他方法可以将文本与预期值进行比较。
编辑:我还应该注意,我也尝试过另一种方式,该方法只是返回 name.getAttribute("value")
的结果,然后将结果与我期望的字符串进行比较,而不是全部完成方法并期望它是真的。
getAttribute
将 return 一个承诺,因此它应该被解决以捕获价值,我们应该能够使用下面的方法验证这一点
expect(this.name.getAttribute("value")).toEqual('bar');
如果您想获取值并将其分配给另一个变量,您可以使用
this.name.getAttribute("value").then(function (value) {
foo = vale
});
调试时保持一致。
.getAttribute("value")
return承诺
- Promise 是一个对象
- Object.toString() returns
"[object Object]"
- 最后你将
"[object Object]"
与 "result"
进行比较,后者总是 false
要解决此问题,请不要忘记解决 Promise。不要试图将所有内容都放在一行中,这会使您的代码不可读且不可调试。对了,.getAttribute("value")
return String 反正不用调用toString()
。并且不要使用 ==
,始终使用 ===
(我在 4 年自动化经验后得出的结论)
使用这个
async getName(option) {
let value = await this.name.getAttribute("value")
if(option === value){
return true;
} else {
return false;
}
}
// or even better
async getName(option) {
let value = await this.name.getAttribute("value")
return option === value
}
但是,您的代码仍然令人困惑。为什么?因为您的方法名为 get name,但 returned 值根本不是名称,它是 returns 布尔值。所以最好是明确的,例如 nameEqualsValue
这样的东西
使用量角器和打字稿,我希望能够将 element.getAttribute("value")
的结果值与字符串进行比较,以验证文本框中的文本是否已成功保存。 getText()
在这种情况下不起作用,因为输入到字段(可编辑文本框)中的文本不会保存为元素的文本属性。这是我的方法:
async getName(option) {
if(option == this.name.getAttribute("value").toString()){
return true;
}
else{
return false;
}
}
这总是 returns 错误,即使传递了正确的值。但是我知道 name.getAttribute("value")
正在返回正确的值,因为当我将结果输出到控制台时,它显示的是正确的值。
当我从上述方法中输入 option
作为 string
时,出现以下错误:This condition will always return 'false' since the types 'String' and '() => string' have no overlap.ts(2367)
。我假设这与 protracor 返回承诺有关,但我不确定是否有任何其他方法可以将文本与预期值进行比较。
编辑:我还应该注意,我也尝试过另一种方式,该方法只是返回 name.getAttribute("value")
的结果,然后将结果与我期望的字符串进行比较,而不是全部完成方法并期望它是真的。
getAttribute
将 return 一个承诺,因此它应该被解决以捕获价值,我们应该能够使用下面的方法验证这一点
expect(this.name.getAttribute("value")).toEqual('bar');
如果您想获取值并将其分配给另一个变量,您可以使用
this.name.getAttribute("value").then(function (value) {
foo = vale
});
调试时保持一致。
.getAttribute("value")
return承诺- Promise 是一个对象
- Object.toString() returns
"[object Object]"
- 最后你将
"[object Object]"
与"result"
进行比较,后者总是false
要解决此问题,请不要忘记解决 Promise。不要试图将所有内容都放在一行中,这会使您的代码不可读且不可调试。对了,.getAttribute("value")
return String 反正不用调用toString()
。并且不要使用 ==
,始终使用 ===
(我在 4 年自动化经验后得出的结论)
使用这个
async getName(option) {
let value = await this.name.getAttribute("value")
if(option === value){
return true;
} else {
return false;
}
}
// or even better
async getName(option) {
let value = await this.name.getAttribute("value")
return option === value
}
但是,您的代码仍然令人困惑。为什么?因为您的方法名为 get name,但 returned 值根本不是名称,它是 returns 布尔值。所以最好是明确的,例如 nameEqualsValue
这样的东西