验证元素属性值
验证元素属性值 用于验证网页指定元素的某个 HTML 属性值是否等于期望值。它会进行精确匹配,常用于检查按钮状态、输入框属性、表单默认值和页面数据标记。
指令标识:VerifyElementAttributeValue
指令类型:网页指令
指令描述:验证指定页面元素的某个HTML属性值是否等于期望值,进行精确匹配验证
先选使用方式
Section titled “先选使用方式”工作流支持「可视化编排」和「代码编排」两种创建方式。验证元素属性值 在两种方式里都能用,核心业务参数一致,区别主要是你通过界面配置,还是通过 Python 脚本配置。
| 方式 | 怎么用 | 适合人群 |
|---|---|---|
| 可视化编排(推荐先学) | 拖入「验证元素属性值」节点,在右侧表单填写元素选择器、属性名称、属性值和输出变量 | 大多数用户,零代码,适合快速搭建和调试 |
| 代码编排(Python) | 在脚本中调用 bots.verifyElementAttributeValue(selector="...", attributeName="class", attributeValue="btn-primary") | 熟悉代码、需要复用脚本或批量生成流程的用户 |
第一次使用建议先用可视化编排跑通,再迁移到 Python 代码编排。下方「参数说明」同时给出界面字段和代码参数名,方便两种方式对应。
什么时候用?
Section titled “什么时候用?”- 验证按钮、输入框等元素的属性值是否符合预期。
- 检查输入框的
type、value、placeholder等属性。 - 验证元素的
class、title或自定义data-*属性。 - 判断页面状态标记是否已经切换到指定值。
- 在表单提交前后校验关键控件属性是否正确。
- 目标元素选择器可以稳定定位到页面元素。
- 属性名称和属性值都要与页面实际内容完全一致,包括大小写和空格。
- 如果目标元素在 iframe 中,需要配置 iframe 页面定位器。
- 已规划好
falseResultHandling:验证失败时继续输出结果,还是抛出异常中断流程。 - 输出变量已规划好,用于保存验证结果(Boolean)。
可视化编排:从 0 到跑通
Section titled “可视化编排:从 0 到跑通”下面用一个常见场景演示:验证后台表单提交按钮的 class 属性是否为 btn-primary。按 4 步即可跑起来:
- 先用 打开网页 打开目标页面,并等待表单区域加载完成。
- 在工作流画布中添加 验证元素属性值 指令。
- 在 元素选择器 中填写按钮定位,例如
//*[@id='submitBtn'];在 属性名称 中填写class;在 属性值 中填写btn-primary。 - 在 将结果保存至 中填写变量名(例如
attrMatched),点击运行查看布尔结果。
| 界面名称 | 代码属性名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
| 元素选择器 | selector | String | 是 | - | 用于定位页面元素的选择器,不能为空,支持从元素库选择元素或手动填写 XPath 等定位器值 |
| 属性名称 | attributeName | String | 是 | - | 要检查的 HTML 属性名称,不能为空,例如 class、id、name、value、title、placeholder |
| 属性值 | attributeValue | String | 是 | - | 期望的属性值内容,不能为空,必须与实际属性值完全匹配,例如 submit、hidden、example-class |
| False结果处理 | falseResultHandling | Enum | 否 | OUTPUT_RESULT | 高级选项。验证结果为 False 时的行为:OUTPUT_RESULT(输出结果,继续流程)、THROW_EXCEPTION(抛出异常,中断流程) |
| iframe页面定位器 | frameSelector | String | 否 | - | 高级选项。iframe 的 XPath,目标元素在 iframe 中时需要填写,例如 //html/iframe |
| 查找元素高级配置 | findElementOptions | JSON | 否 | - | 高级选项。JSON 配置,可设置查找元素的超时等待等选项 |
| 是否发送消息 | sendMsgFlag | Boolean | 否 | True | 是否发送节点消息 |
| 界面名称 | 代码属性名 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| 将结果保存至 | outKey | Boolean | 否 | 存储验证结果的变量名,返回 true 表示验证成功,false 表示验证失败,例如 attrMatched |
- 运行日志中节点为成功状态。
- 输出变量中得到布尔结果(
true或false)。 - 实际属性值与期望属性值完全一致时返回
true。 - 属性值不一致、属性不存在或元素不存在时,按
falseResultHandling策略处理。
运行后你会看到(以上面场景为例):
- 如果按钮
class正好等于btn-primary,变量attrMatched保存为true。 - 如果实际属性值不同,变量
attrMatched保存为false,或在配置抛出异常时中断流程。
| 现象 / 报错原文 | 可能原因 | 处理建议 |
|---|---|---|
| 找不到元素 | 选择器错误,或页面尚未加载完成 | 检查选择器;在前置步骤增加等待元素存在 |
输出 false | 属性不存在,或实际属性值与期望值不完全一致 | 先使用 获取元素属性 查看实际值 |
| 结果与预期不符 | 属性值大小写、空格或多个 class 顺序不同 | 按页面实际属性值填写,必要时改用更适合的验证方式 |
| 验证失败直接中断流程 | falseResultHandling 设为 THROW_EXCEPTION | 需要继续流程时改为 OUTPUT_RESULT |
| iframe 中元素读不到 | 未配置 iframe 页面定位器 | 填写 frameSelector 后重试 |
| 下游取不到验证结果 | 未配置输出变量 | 检查「将结果保存至」是否填写 |
Python 代码编排
Section titled “Python 代码编排”代码编排以 Python 为主。运行上下文由代码编排模板创建,示例里只需要关注业务指令本身。
# 先打开后台表单页面bots.openUrl(url="https://admin.example.com/form")
# 验证元素的 class 属性值是否等于期望值bots.verifyElementAttributeValue( selector="//*[@id='submitBtn']", attributeName="class", attributeValue="btn-primary", falseResultHandling="OUTPUT_RESULT", outKey="attrMatched",)如果目标元素在 iframe 中,可以补充 iframe 页面定位器:
bots.verifyElementAttributeValue( selector="//*[@id='submitBtn']", attributeName="class", attributeValue="btn-primary", frameSelector="//html/iframe", falseResultHandling="OUTPUT_RESULT", outKey="attrMatched",)可视化表单里的「元素选择器」「属性名称」「属性值」「False结果处理」「iframe页面定位器」「查找元素高级配置」「是否发送消息」「将结果保存至」分别对应代码里的 selector、attributeName、attributeValue、falseResultHandling、frameSelector、findElementOptions、sendMsgFlag、outKey。
如果你想在工作流中通过节点动态编排指令,可使用 执行指令(XML)节点。
Q1:属性值必须完全匹配吗?
Section titled “Q1:属性值必须完全匹配吗?”A: 是的。该指令使用精确匹配,属性值必须完全相等,包括大小写和空格。例如,btn-primary 和 btn primary 是不同的。
Q2:如果属性不存在会怎样?
Section titled “Q2:如果属性不存在会怎样?”A: 如果指定的属性不存在或元素不存在,验证结果将返回 false。建议先使用 验证元素存在 指令验证元素是否存在。
Q3:属性名称是否区分大小写?
Section titled “Q3:属性名称是否区分大小写?”A: 是的。属性名称和属性值都区分大小写。必须与 HTML 中的实际值完全一致才能匹配成功。
Q4:False结果处理如何使用?
Section titled “Q4:False结果处理如何使用?”A: 该参数用于控制验证失败场景下的执行行为,支持两种策略(括号内为需传入的参数值):
输出结果(OUTPUT_RESULT,默认):验证失败时输出 false 结果到 outKey,继续执行后续流程。
抛出异常(THROW_EXCEPTION):验证失败时抛出异常,中断当前流程执行。