您如何将 element.getAttribute() 的值与量角器中的字符串进行比较?
Posted
技术标签:
【中文标题】您如何将 element.getAttribute() 的值与量角器中的字符串进行比较?【英文标题】:How would you compare the value of element.getAttribute() to a String in protractor? 【发布时间】:2021-10-29 07:26:56 【问题描述】:使用量角器和打字稿,我希望能够将element.getAttribute("value")
的结果值与字符串进行比较,以验证文本框中的文本是否已成功保存。 getText()
在这种情况下不起作用,因为输入到字段(可编辑文本框)中的文本没有保存为元素的文本属性。这是我的方法:
async getName(option)
if(option == this.name.getAttribute("value").toString())
return true;
else
return false;
这总是返回 false,即使传递了正确的值。但是我知道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")
的结果,然后将结果与我期望的字符串进行比较,而不是在方法中执行所有操作并期望这是真的。
【问题讨论】:
【参考方案1】:getAttribute
将返回一个承诺,因此它应该被解析为捕获价值,我们应该能够使用下面的方法来验证这一点
expect(this.name.getAttribute("value")).toEqual('bar');
如果你想获得价值并将其分配给另一个你可以使用的变量
this.name.getAttribute("value").then(function (value)
foo = vale
);
【讨论】:
【参考方案2】:调试时保持一致。
.getAttribute("value")
回报承诺
Promise 是一个对象
Object.toString() 返回"[object Object]"
最后你将"[object Object]"
与"result"
进行比较,false
要解决此问题,请不要忘记解决 Promise。不要试图将所有内容放在一行中,这会使您的代码不可读且不可调试。顺便说一句,.getAttribute("value")
无论如何都会返回 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,但是返回的值根本不是名字,所以返回的是boolean。所以最好是明确的,例如nameEqualsValue
这样的东西
【讨论】:
以上是关于您如何将 element.getAttribute() 的值与量角器中的字符串进行比较?的主要内容,如果未能解决你的问题,请参考以下文章
元素的属性相关操作element.getAttribute('xxx'),element.setAttribute('xxx','xxx'),eleme