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

Playwright中如何统计可见元素数量?原count方法包含隐藏元素

问题:如何统计Playwright中可见元素的数量?

我需要完成两项任务:

  • 检查某个元素是否在屏幕上可见(已有可正常运行的代码)
  • 统计屏幕上可见元素的数量

最初使用的代码如下:

test('Desktop check - (Optimal on desktop / tablet) only shown on smaller screens (i.e mobile breakpoint)', async ({ page, isMobile }) => {
    test.skip(isMobile)
    await page.goto(url);
    const buttonsCount = await page.getByText('(Optimal on desktop / tablet)').count();
    expect(buttonsCount).toBe(0);
});

但该方法会统计所有隐藏状态的元素,导致预期结果为0时实际返回1。虽然.toBeVisible()可以解决单个元素的可见性检查,但.toBeVisible()没有可访问的count属性,请问如何基于.toBeVisible()统计数量?或者是否应该通过循环计数后传入.toBe()?


解决方案

方法1:使用filter()筛选可见元素后统计

Playwright的Locator支持filter()方法,可结合isVisible()条件筛选出可见元素,再调用count()统计数量:

test('Desktop check - (Optimal on desktop / tablet) only shown on smaller screens', async ({ page, isMobile }) => {
    test.skip(isMobile);
    await page.goto(url);
    // 筛选可见元素并统计
    const visibleButtonsCount = await page.getByText('(Optimal on desktop / tablet)')
        .filter(async locator => await locator.isVisible())
        .count();
    expect(visibleButtonsCount).toBe(0);
});

方法2:遍历元素逐个判断可见性

先获取所有匹配元素,再循环检查每个元素的可见性并计数:

test('Desktop check - (Optimal on desktop / tablet) only shown on smaller screens', async ({ page, isMobile }) => {
    test.skip(isMobile);
    await page.goto(url);
    const allButtons = page.getByText('(Optimal on desktop / tablet)');
    const totalCount = await allButtons.count();
    let visibleCount = 0;

    for (let i = 0; i < totalCount; i++) {
        if (await allButtons.nth(i).isVisible()) {
            visibleCount++;
        }
    }

    expect(visibleCount).toBe(0);
});

方法3:直接断言可见元素数量

如果仅需验证数量,可直接用toHaveCount结合过滤后的可见元素定位器:

test('Desktop check - (Optimal on desktop / tablet) only shown on smaller screens', async ({ page, isMobile }) => {
    test.skip(isMobile);
    await page.goto(url);
    const visibleButtons = page.getByText('(Optimal on desktop / tablet)')
        .filter(async locator => await locator.isVisible());
    await expect(visibleButtons).toHaveCount(0);
});

内容的提问来源于stack exchange,提问作者Carl Bruiners

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 21:23:16