在 Playwright 中获取输入元素的值

Posted

技术标签:

【中文标题】在 Playwright 中获取输入元素的值【英文标题】:Getting value of input element in Playwright 【发布时间】:2020-09-12 01:40:17 【问题描述】:

如何返回 elem 的值,以便验证它实际上是 1

const elem = await page.$('input#my-input')
await elem.fill('1')

【问题讨论】:

【参考方案1】:

最简单的方法是使用$eval。在这里你可以看到一个小例子:

const playwright = require("playwright");

(async () => 
  const browser = await playwright.chromium.launch();
  const context = await browser.newContext();
  const page = await context.newPage();
  await page.setContent(`<input id="foo"/>`);
  await page.type("#foo", "New value")
  console.log(await page.$eval("#foo", el => el.value))
  await page.screenshot( path: `example.png` );
  await browser.close();
)();

【讨论】:

谢谢马克斯。我正在寻找一种简单的方法来检查 html 元素句柄的值。这可能吗? 请注意:您要查找的基本代码是await page.$eval("#foo", el =&gt; el.value) 还要注意$eval() doesn't perform actionability checks(它不会自动等待),因此您可能需要在$eval() 前面加上await page.waitForSelector("#foo") 之类的东西 如果遇到类型问题,可以设置:el as HTMLInputElement;【参考方案2】:

inputValue 方法已在 Playwright v1.13.0 中添加

await page.inputValue('input#my-input');

它为选定的&lt;input&gt;&lt;textarea&gt; 元素返回input.value。抛出非输入元素。 Read more.

【讨论】:

优于$eval()。谢谢!【参考方案3】:

不推荐使用 1.19 版(可能还有更低版本)的元素处理程序。 而不是使用定位器。

page.locator(selector).innerText()

在你的情况下,它会是

expect(page.locator("input#my-input").innerText().includes("1")).toBeTruthy()

阅读更多: https://playwright.dev/docs/api/class-elementhandle#element-handle-fill

【讨论】:

以上是关于在 Playwright 中获取输入元素的值的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 的 Playwright 中,如何从框架 (iframe) 中检索元素的句柄?

在jQuery中获取输入元素的值

playwright - 并行从多个页面获取内容

Hello Playwright:与元素交互

获取包装器的 innerHTML,包括用户在输入元素中输入的值

Hello Playwright:执行 JavaScript 代码