11

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

  let dd_handle = await page.$("#email30");
  let value = await dd_handle.getAttribute("value");

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

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

document.getElementById("email30").value

不知道如何从剧作家框架中读取价值。有人可以建议吗?他们的文件在这里完全没有帮助。

4

3 回答 3

18

如何使用 playwright/puppeteer 检索输入值存在三个主要趋势。

page.evaluate

const value = await page.evaluate(el => el.value, await page.$('input'))

page.$eval

const value = await page.$eval('input', el => el.value)

page.evaluateElement.getAttribute

const value = await page.evaluate(() => document.querySelector('input').getAttribute('value'))

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

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

于 2020-06-30T16:58:55.257 回答
7

好的,最后下面的代码为我完成了这项工作!

const value = await page.$eval("#email30", (el) => el.value);
于 2020-06-30T08:50:37.817 回答
0

这是迄今为止效果最好的

const somevalue = this.page.inputValue('#Name');
于 2021-12-07T19:24:40.807 回答