You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Protractor与TypeScript环境下,如何正确比较element.getAttribute('value')的返回值与字符串?

解决Protractor+TypeScript中文本框value与字符串比较的问题

你踩的坑其实是Protractor异步API的典型问题——getAttribute("value")返回的不是直接的字符串,而是一个Promise<string>,你之前的代码没处理这个异步逻辑,导致拿Promise对象和字符串做比较,自然永远返回false,TypeScript的报错也正是因为类型不匹配(String和Promise<string>没有交集)。

为什么之前的写法不对?

看你原来的代码:

async getName(option) { 
  if(option == this.name.getAttribute("value").toString()){
    return true; 
  } else{
    return false; 
  } 
}

这里this.name.getAttribute("value")是一个Promise对象,调用toString()只会得到类似"[object Promise]"的字符串,和你传入的实际文本肯定不相等,所以不管option传什么,都会走else分支返回false。

正确的写法:await异步结果

因为你的方法已经标记了async,直接用await获取getAttribute的实际返回值再做比较就行:

async getName(option: string): Promise<boolean> { 
  // 先await拿到实际的value字符串
  const inputValue = await this.name.getAttribute("value");
  // 再和传入的option做全等比较
  return inputValue === option;
}

关于你尝试的另一种方式

如果你想让方法直接返回value,再在外部比较,也要记得在调用时await这个方法的结果:

// 定义获取值的方法
async getInputValue(): Promise<string> {
  return this.name.getAttribute("value");
}

// 调用时
const actualValue = await getInputValue();
// 外部做比较
const isMatch = actualValue === "你的预期字符串";

额外提示:用Protractor的expect语法更简洁

其实Protractor的expect已经支持直接处理Promise,你甚至可以不用自己写方法,直接这样断言:

expect(this.name.getAttribute("value")).toBe("你的预期文本");

Protractor会自动等待Promise resolve后再做比较,省去手动await的步骤。

内容的提问来源于stack exchange,提问作者Nick Ward

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 07:29:09