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

在Cypress中如何断言带Shadow DOM的pds-radio单选框是否处于选中状态

pds-radio单选框选中状态断言方案

相关单选框元素截图:
单选框元素截图
对应DOM结构如下:

<pds-radio class data-v-1234bb3c model="singleSelection" checked>
 #shadow-root (open)
 <div class="wrapper">
  <div class="radio-wrapper">
          <div class="radio-container">
                 <div class="radio active" tabindex="0">
                        ::before

选中状态有两个可判断特征:

  • <pds-radio>宿主标签存在checked属性
  • Shadow DOM内部.radio元素类名包含active,未选中时类名仅为radio

优先选择判断宿主属性的方案,无需处理Shadow DOM穿透逻辑,稳定性更高。不同测试工具的实现方案如下:

1. Cypress

  • 断言宿主checked属性
cy.get('pds-radio[model="singleSelection"]').should('have.attr', 'checked')
  • 穿透Shadow DOM断言内部类名
cy.get('pds-radio[model="singleSelection"]').shadow().find('.radio').should('have.class', 'active')

2. Playwright

  • 断言宿主checked属性
await expect(page.locator('pds-radio[model="singleSelection"]')).toHaveAttribute('checked')
  • 穿透Shadow DOM断言内部类名(Playwright默认支持Shadow DOM穿透,无需额外配置)
await expect(page.locator('pds-radio[model="singleSelection"] >> .radio')).toHaveClass('radio active')

3. Selenium

  • 断言宿主checked属性
WebElement radioHost = driver.findElement(By.cssSelector("pds-radio[model='singleSelection']"));
assertTrue(radioHost.getAttribute("checked") != null);
  • 穿透Shadow DOM断言内部类名
WebElement radioHost = driver.findElement(By.cssSelector("pds-radio[model='singleSelection']"));
SearchContext shadowRoot = radioHost.getShadowRoot();
WebElement innerRadio = shadowRoot.findElement(By.cssSelector(".radio"));
assertTrue(innerRadio.getAttribute("class").contains("active"));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:08