如何从剧作家那里读取文本框值

Par*_*rde 7 node.js playwright

我在页面上输入了 ID 为“email30”的文本字段,我正在尝试从 Playwright 读取它的值

  let dd_handle = await page.$("#email30");
  let value = await dd_handle.getAttribute("value");
Run Code Online (Sandbox Code Playgroud)

但是它返回“”,尽管我在输入文本中有一个值。当我检查时,我也没有看到 value 属性设置为当前值。

下面的普通 JS 代码给了我正确的值

document.getElementById("email30").value
Run Code Online (Sandbox Code Playgroud)

不确定如何从剧作家框架中读取价值。任何人都可以请指教吗?他们的文件在这里完全没有帮助。

the*_*ton 12

如何使用剧作家/木偶操纵者检索输入值存在三个主要趋势。

page.evaluate

const value = await page.evaluate(el => el.value, await page.$('input'))
Run Code Online (Sandbox Code Playgroud)

page.$eval

const value = await page.$eval('input', el => el.value)
Run Code Online (Sandbox Code Playgroud)

page.evaluateElement.getAttribute

const value = await page.evaluate(() => document.querySelector('input').getAttribute('value'))
Run Code Online (Sandbox Code Playgroud)

前两个将返回相同的结果,性能非常相似,我无法举出一个例子,当我们可以偏爱另一个时(也许一个:一个$eval更短)。Element.getAttribute如果您在评估之前操作输入的值并且想要检索新值,则不建议使用第三个 with 。它将始终返回原始属性值,在大多数情况下它是一个空字符串。这是JavaScript中属性属性的主题。

但是page.evaluateElement.getAttribute当您需要使用其他提到的方法无法访问的属性时,with会很方便(例如:类名、数据属性、aria 属性等)


Par*_*rde 7

好的,终于按照代码为我完成了这项工作!

const value = await page.$eval("#email30", (el) => el.value);
Run Code Online (Sandbox Code Playgroud)