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

如何使用Playwright根据问题与答案文本选择单选按钮?

基于问题文本和答案文本选择Playwright单选按钮

问题背景

Playwright官方文档里介绍了通过答案标签选择单选按钮的方法,但我需要完成一系列是/否问卷的自动填写,不同问卷的问题会变化,不想依赖ID、aria-labelledby这类HTML内部属性,希望仅通过问题文本和答案文本来定位并选择单选按钮。以下是目标问卷的HTML结构:

<!DOCTYPE html>
<html lang="en">
  <body>
    <legend>
      <h4> 
        <span>22.</span>
        <span>Do you have wifi?</span>
      </h4>
    </legend>
    <div class='question-body'>
      <div>
        <div class='answer'>
          <div class='radio-container'>
            <input type='radio' aria-labelledby="yes_radio">
            <label for="yes_radio">
              <span>Yes</span>
            </label>
          </div>
        </div>
        <div class='answer'>
          <div class='radio-container'>
            <input type='radio' aria-labelledby="no_radio">
            <label for="no_radio">
              <span>No</span>
            </label>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>

实现方案

完全可以通过问题文本和答案文本定位单选按钮,下面提供两种实用的Playwright实现方式:

方法1:使用XPath定位

XPath可以直接通过文本内容关联问题和对应的答案,逻辑清晰,适配这种结构:

// 定义要匹配的问题文本和答案文本
const questionText = "Do you have wifi?";
const answerText = "Yes";

// 找到对应问题下的目标单选框并勾选
await page.locator(`xpath=//h4[span[text()="${questionText}"]]/../../following-sibling::div[@class='question-body']//div[@class='answer']//span[text()="${answerText}"]/../preceding-sibling::input`).check();

方法2:结合CSS选择器和文本过滤

先定位到包含目标问题的区域,再在该区域内筛选对应答案的单选框:

const questionText = "Do you have wifi?";
const answerText = "No";

// 先找到问题对应的question-body容器
const questionContainer = page.locator(`h4:has-text("${questionText}")`).locator("..").locator("..").locator("+ .question-body");

// 在容器内找到对应答案的单选框并勾选
await questionContainer.locator(`.answer:has-text("${answerText}") input[type='radio']`).check();

说明

  • 两种方法都不依赖固定的HTML属性,只通过问题和答案的文本内容定位,适配问题变化的场景
  • 可以把逻辑封装成函数,传入不同的问题和答案文本,批量处理问卷

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:46:11