RobotFramework Browser库找不到元素(本地测试和服务器不一致)

# 问题背景

使用Browser库写的UI自动化用例,在本地测试是可以正常跑过的,提交代码后服务器跑不通过,报错如下,并且我打开有头浏览器可以看到元素是正常加载完成了的

TimeoutError: locator.waitFor: Timeout 30000ms exceeded.

Call log:

  • waiting for locator('iframename="pdiv_page-mainIframe"').contentFrame().locator('iframe').contentFrame().locator('role=columnheadername="开始时间(秒)"') to be visible

元素本身如下

<th _ngcontent-ng-c691599427="" title="开始时间(秒)" class="ng-star-inserted"><div class="plx-table-x-th-content"><span _ngcontent-ng-c691599427="">开始时间(秒)</span><!----><plx-table-x-resize _ngcontent-ng-c691599427="" class="ng-star-inserted"><span class="table-x-resize-line"></span></plx-table-x-resize><!----></div><!----><!----><!----><!----></th>

原代码如下:

对应Python: expect(page.locator("iframename=\\"pdiv_page-mainIframe\\"").content_frame.locator("iframe").content_frame.get_by_role("columnheader", name="开始时间(秒)")).to_be_visible()

等待元素出现 ${NESTED_IFRAME} >>> role=columnheadername="开始时间(秒)"

# 问题原因 (deepseek给的)

核心矛盾 :你使用的是 role=columnheader[name="开始时间(秒)"] 定位器,但浏览器在无头模式下为该 <th> 计算出的可访问性名称可能不是 " 开始时间(秒)" ,因为文本节点内容是 " 开始时间(秒) "(前后有空格),而可访问性名称通常会被规范化(trim)。此外,role=columnheader 依赖于可访问性树的构建,无头模式下的计算时序有延迟,导致超时。

# 解决方法

修改元素定位方式,建议表格有表头的不要使用role=columnheader这种定位方式

Wait For Elements State ${NESTED_IFRAME} >>> th:has-text("开始时间(秒)") visible timeout=60s

相关推荐
火云代理1 天前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
专注仿真4 天前
自动化测试实战项目开发:从零搭建一套可落地的测试框架
自动化测试
freejackman6 天前
【工程化】从“单兵作战”到“多引擎架构”:基于门面模式的重构实战
大数据·数据库·hive·sql·测试工具·设计模式·架构
坐吃山猪6 天前
Python22-PostMan调试MCP
测试工具·postman·mcp
测试界的小码农7 天前
【 AI Agent 软件测试实战(05):任务规划与状态管理,让 Agent 学会拆解复杂测试任务】
人工智能·测试工具
和粒科技9 天前
热重分析仪TG 309 Libra Classic
测试工具
猴哥聊项目管理10 天前
自动化测试管理工具实战:从手工测试到自动化提效的转型路径
自动化测试·测试用例管理·测试管理工具·自动化测试管理工具·手工测试转型
螺丝钉tina14 天前
[Playwright] [02]常用命令与调试:Debug UI、Mode和 Trace Viewer
开发语言·javascript·测试工具·ui·自动化
梧桐16815 天前
14天、31个缺陷、28个测试脚本—用 Claude Code 完成第三方软件测试
人工智能·测试工具
mewowaBc16 天前
postman使用细则
测试工具·postman·偏差