如何在Robot Framework中使用正则验证动态文本格式?
Robot Framework动态文本格式验证的正则修正方案
需求说明
需要验证一段包含动态内容(<strong>标签包裹的部分)的文本格式,仅校验格式正确性,不关注具体内容。目标文本如下:
"We will start the activity at 308 JAMES ST, WARREN RI 02885, effective 05/07/2023.
A downpayment of $12.34 is required to participate in it.
Interested users can register from 04/06/2023 in between 8:00 AM to 05:00 PM everyday."
原代码问题分析
- 未考虑文本中的
<strong>标签,正则直接匹配动态内容的裸文本,与实际获取的文本结构不符 - 部分正则逻辑冗余(比如日期部分用了过于复杂的科学计数法正则),不符合目标格式的匹配需求
- 未处理文本中的换行和空格差异,容易匹配失败
修正后的实现代码
# 定义匹配完整文本格式的正则表达式 ${Regex}= Set Variable ^We will start the activity at <strong>\d+ [A-Za-z]+( [A-Za-z]+)*, [A-Za-z]+ [A-Za-z]+\s\d{5}</strong>, effective <strong>\d{2}/\d{2}/\d{4}</strong>\.\s*A downpayment of <strong>\$\d+\.\d{2}</strong> is required to participate in it\.\s*Interested users can register from <strong>\d{2}/\d{2}/\d{4}</strong> in between <strong>\d{1,2}:\d{2} [AP]M to \d{1,2}:\d{2} [AP]M</strong> everyday\.$ # 获取元素的显示文本(替换为你的实际XPath) ${Original text}= Get Element Text //xpath/to/target/element # 验证文本格式是否匹配正则 Should Match Regexp ${Original text} ${Regex}
正则各部分说明
^和$:确保正则匹配整个文本,避免部分内容匹配通过<strong>...</strong>:对应文本中包裹动态内容的标签,必须完整匹配- 地址部分:
<strong>\d+ [A-Za-z]+( [A-Za-z]+)*, [A-Za-z]+ [A-Za-z]+\s\d{5}</strong>
匹配格式:数字开头 + 街道名称(支持多单词) + 城市 + 州 + 5位邮编 - 日期部分:
<strong>\d{2}/\d{2}/\d{4}</strong>
严格匹配MM/DD/YYYY格式的日期 - 金额部分:
<strong>\$\d+\.\d{2}</strong>
匹配美元格式:$开头 + 整数部分 + 两位小数 - 时间范围部分:
<strong>\d{1,2}:\d{2} [AP]M to \d{1,2}:\d{2} [AP]M</strong>
匹配12小时制的时间范围(支持1位或2位小时数) \s*:匹配任意数量的空白字符(包括换行、空格),兼容文本中的换行和排版差异
注意事项
- 若原文本中的
<strong>标签是HTML元素,使用Get Element Text会自动去除标签,只返回纯文本。这种情况下需要调整正则,去掉<strong>部分,直接匹配动态内容格式:
调整后的正则示例:^We will start the activity at \d+ [A-Za-z]+( [A-Za-z]+)*, [A-Za-z]+ [A-Za-z]+\s\d{5}, effective \d{2}/\d{2}/\d{4}\.\s*A downpayment of \$\d+\.\d{2} is required to participate in it\.\s*Interested users can register from \d{2}/\d{2}/\d{4} in between \d{1,2}:\d{2} [AP]M to \d{1,2}:\d{2} [AP]M everyday\.$
内容的提问来源于stack exchange,提问作者Bhagi
相关产品推荐
相关产品推荐

