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

相关推荐
测试19981 小时前
Selenium 无法定位元素的几种解决方案
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
慧都小项4 小时前
夜间Web回归跑到一半停了?TestComplete 15.83提升批量测试稳定性
前端·测试工具·数据挖掘·回归·汽车·web
Luminbox紫创测控4 小时前
汽车前照灯阳光灼烧:光学热仿真与太阳光模拟器验证
人工智能·测试工具·汽车·安全性测试·测试标准
东莞市奥普新音频技术有限公司6 小时前
国产音频分析仪怎么选?从性能参数、测试软件到自动化能力
人工智能·科技·测试工具·自动化·音视频·音频
flower_drop6 小时前
测试 Android,不必再在 ADB、投屏、日志之间来回切换
测试工具
我的xiaodoujiao10 小时前
Django 基础知识详细图文教程 1-Django 介绍
后端·python·学习·测试工具·django
降临-max1 天前
Postman断言、数据驱动+Jenkins集成
软件测试·测试工具·postman
qq_161111272 天前
Jenkins+Python自动化测试持续集成详细教程
自动化测试·python·jenkins·教程·持续集成
随风而飘1862 天前
KEITHLEY吉时利 2400 数字源表
人工智能·功能测试·科技·测试工具
程序员三藏2 天前
自动化测试用例编写详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例