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

如何用Playwright定位器获取多个同名Angular双向绑定下拉框的ngModel值

验证Angular双向绑定下拉框选中值是否均为Completed

我有多个name属性为dispo的下拉框,采用Angular双向绑定(ngModel),需要验证所有下拉框的当前选中值是否均为Completed。

浏览器解析后的HTML元素如下:

<select _ngcontent-pis-c119="" name="dispo" class="dash-select ng-pristine ng-valid ng-touched">
    <option _ngcontent-pis-c119="" value="Active" class="ng-star-inserted"> Active </option>
    <option _ngcontent-pis-c119="" value="On Hold" class="ng-star-inserted"> On Hold </option>
    <option _ngcontent-pis-c119="" value="Completed" class="ng-star-inserted"> Completed </option>
    <option _ngcontent-pis-c119="" value="Canceled" class="ng-star-inserted"> Canceled </option>
    <!---->
</select>

我当前能获取到所有下拉框元素集合,但不知道如何获取每个下拉框的ngModel值,代码如下:

// 获取所有Disposition元素集合
const dispositionsCompleted = page.locator('select[name="dispo"]');
// 检查所有Disposition是否设置为Completed
const count = await dispositionsCompleted.count();

for (let i = 0; i < count; i++) {   
    console.log(await dispositionsCompleted.nth(i).locator('option').inputValue());
}

解决方法

不需要直接获取ngModel的值,Playwright可以直接读取下拉框的选中状态,以下是几种可行方案:

方案1:遍历验证选中的value值

直接对<select>元素调用inputValue()方法,即可获取当前选中option的value属性值:

// 获取所有name为dispo的下拉框
const dispositionsCompleted = page.locator('select[name="dispo"]');
const count = await dispositionsCompleted.count();

for (let i = 0; i < count; i++) {   
    const selectedValue = await dispositionsCompleted.nth(i).inputValue();
    console.log(selectedValue);
    // 断言选中值为Completed
    expect(selectedValue).toBe('Completed');
}

方案2:验证显示文本(处理空格)

如果需要验证下拉框显示的文本(示例中option文本带有前后空格),可以定位到选中的option并去除空格后比对:

const dispositionsCompleted = page.locator('select[name="dispo"]');
const count = await dispositionsCompleted.count();

for (let i = 0; i < count; i++) {   
    const selectedText = await dispositionsCompleted.nth(i).locator('option:checked').textContent();
    // 去除前后空格后断言
    expect(selectedText?.trim()).toBe('Completed');
}

方案3:批量断言简化代码

利用Playwright的异步能力,批量获取所有选中值后统一验证:

const dispositionsCompleted = page.locator('select[name="dispo"]');
// 批量获取所有下拉框的选中值
const allSelectedValues = await Promise.all(
    (await dispositionsCompleted.all()).map(el => el.inputValue())
);
// 断言所有值都是Completed
allSelectedValues.forEach(value => expect(value).toBe('Completed'));

内容的提问来源于stack exchange,提问作者Davidx.You

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:45:27