openbmc中如何对日期与时间模块进行GUI自动化测试? 当前经过调整适配后测试通过率为4/15失败11个。两个原因第一个是测试用例是3-6年前写的文本之类的有改动第二个问题是当前的界面通用关键字没考虑导航窗格被折叠的因素导致CI失败。用例 1Verify Navigation To Date And Time Page测试目的名义上验证能否导航到“日期和时间”页面。实际执行流程Suite Setup Execution登录 BMC GUI进入 Overview 页面。最大化浏览器窗口。Test Setup调用Navigate To Date And Time Page其最新实现为Navigate To Date And Time Page[Documentation] Navigate to the date and time page from main menu.${current_url} Get Location${already_there} Run Keyword And Return Status Should Contain ${current_url} date-timeIF not ${already_there}Ensure Sidebar ExpandedNavigate To Required Sub Menu ${xpath_settings_menu} ${xpath_date_time_sub_menu} date-timeENDWait Until Element Is Not Visible ${xpath_page_loading_progress_bar} timeout30获取当前 URL判断是否已包含date-time。如果已经在日期时间页面直接跳过导航。如果不在先确保侧边栏展开再调用Navigate To Required Sub Menu进行菜单导航。Navigate To Required Sub Menu内部逻辑判断子菜单${xpath_date_time_sub_menu}是否可见。若不可见点击主菜单${xpath_settings_menu}//*[data-test-idnav-button-settings]。点击子菜单${xpath_date_time_sub_menu}//*[data-test-idnav-item-date-time]。验证 URL 包含date-time。等待加载进度条消失。用例体Page Should Contain Element ${xpath_date_time_heading}//h1[text()Date and time]。问题分析用例名为“Verify Navigation”但导航动作完全由 Test Setup 完成用例体只验证标题是否存在。它并没有独立测试“点击菜单→跳转页面”的导航过程因此测试目的名不副实。该用例与 Test Setup 的职责重叠属于冗余设计。建议最佳方案改名为Verify Date And Time Page Heading承认它只是验证标题。次佳方案删除该用例。导航已由每个用例的 Test Setup 保证无需单独验证。最差方案保持现状。会继续造成测试意图混淆。因为如果标题不是date and time 那第一个测试用例会失败如果标题又是导航到日期与时间界面那实际情况就是确实导航过去了只是标题不对造成的失败并不是导航操作本身有问题人工复刻登录 BMC GUI。若左侧导航栏未显示点击左上角按钮展开。点击“Settings”菜单。点击“Date and time”子菜单。确认页面标题为“Date and time”。用例 2Verify Text Under Date And Time Page测试目的验证页面上的两段说明文字是否存在。自动化操作Test Setup同上导航到日期时间页面。用例体Page Should Contain To change how date and time are displayed (either UTC or browser offset) throughout the application, visit Profile SettingsPage Should Contain If NTP is selected but an NTP server is not given or the given NTP server is not reachable, then time.google.com will be used.结果FAILSetup failed: ElementNotInteractableException失败原因第一用例体第二段已被移除。第二原始Navigate To Date And Time Page中Click Element ${xpath_settings_menu} Click Element ${xpath_date_time_sub_menu}它无条件点击“设置”菜单。如果当前已经在“日期和时间”页面侧边栏的“设置”菜单是展开状态再点击它会触发折叠。折叠动画期间子菜单“日期和时间”逐渐消失紧接着的点击就会失败被拦截或元素不可见。人工复刻进入日期时间页面。查看页面顶部文字确认用例体第一段存在用例 3Verify Existence Of All Sections In Date And Time Page测试目的验证“Configure settings”区域存在。自动化操作Test Setup导航到页面。用例体Page Should Contain Configure settings人工复刻进入页面。确认页面上有“Configure settings”标题。用例 4Verify Existence Of All Buttons In Date And Time Page测试目的验证手动模式、NTP 模式、保存按钮存在。自动化操作Test Setup导航到页面。用例体Page Should Contain Element ${xpath_select_manual}//*[data-test-iddateTime-radio-configureManual]Page Should Contain Element ${xpath_select_ntp}//*[data-test-iddateTime-radio-configureNTP]Page Should Contain Element ${xpath_select_save_settings}//button[data-test-iddateTime-button-saveSettings]结果PASS。原因导航成功元素存在。人工复刻进入页面。确认有“Configure manually”、“Configure NTP”单选按钮和“Save settings”按钮。用例 5Verify Existence Of All Input Boxes In Date And Time Page测试目的验证手动和 NTP 模式下的输入框存在。自动化操作Test Setup导航到页面。用例体Click Element At Coordinates ${xpath_select_manual} 0 0点击手动模式Page Should Contain Element ${xpath_manual_date}//input[data-test-iddateTime-input-manualDate]Page Should Contain Element ${xpath_manual_time}//input[data-test-iddateTime-input-manualTime]再点击 NTP 模式检查三个 NTP 输入框。人工复刻进入页面。点击“Configure manually”确认出现日期和时间输入框。点击“Configure NTP”确认出现三个 NTP 服务器输入框。用例 6Verify Date And Time From Configuration Section测试目的从配置区域获取日期时间与 BMC CLI 对比。自动化操作Test Setup导航到页面。用例体点击手动模式。Get Value ${xpath_manual_date}和Get Value ${xpath_manual_time}。通过 SSH 执行date %Y-%m-%dT%H:%M:%S。Should Contain ${cli_date_time} ${manual_date} ${manual_time}。结果PASS。原因页面已就绪输入框存在且值正确。人工复刻进入页面选择“Configure manually”。记下日期和时间。SSH 登录 BMC执行date对比。用例 7Verify Display Of Date And Time In GUI Page测试目的从 Redfish 获取时间与 GUI 显示对比。自动化操作Test Setup导航到页面。用例体Set Timezone In Profile Settings Page Default可能涉及导航到 Profile Settings 再返回再次Navigate To Date And Time Page。通过 CLI 获取时间转换格式。Page Should Contain ${redfish_date}和${redfish_time}。结果FAILSetup failed: ElementClickInterceptedException。失败原因Test Setup 导航失败。人工复刻进入页面查看日期时间。通过 Redfish 接口获取时间对比。用例 8Verify Profile Setting Button In Date And Time Page测试目的点击“Profile settings”链接跳转到个人设置页面。自动化操作Test Setup导航到页面。用例体Click Element ${xpath_profile_settings_link}//a[contains(text(),Profile Settings)]Wait Until Page Contains Element ${xpath_profile_settings_heading}Location Should Contain profile-settings结果FAILElementClickInterceptedException。失败原因点击链接时被nav-overlay遮挡。人工复刻进入页面。点击“Profile Settings”链接确认跳转。用例 9Verify Existence Of Timezone Buttons In Profile Settings Page测试目的验证个人设置页面的时区按钮存在。自动化操作Test Setup导航到页面。用例体点击 Profile Settings 链接。等待页面标题。检查xpath_default_UTC和xpath_browser_offset。结果FAILSetup failed: ElementClickInterceptedException。失败原因Test Setup 导航失败。人工复刻进入个人设置页面。确认有“Default UTC”和“Browser offset”按钮。用例 10Verify Date And Time Change To Browser Offset Time测试目的选择 Browser offset 后时间变化。自动化操作Test Setup导航到页面。用例体点击 Profile Settings 链接。点击 Browser offset保存。获取偏移文本。返回日期时间页面验证显示。结果FAILElementClickInterceptedException。失败原因点击 Profile Settings 链接时被nav-overlay遮挡。人工复刻进入个人设置选择 Browser offset保存。返回日期时间页面确认时间已变。用例 11Verify NTP Server Input Fields In Date And Time Page测试目的验证 NTP 服务器输入框可编辑保存。自动化操作Test SetupSetup To Power Off And Navigate关机并导航。用例体点击 NTP 模式。输入三个 NTP 地址10.10.10.10等。保存刷新验证值。结果FAILSetup failed: ElementClickInterceptedException。失败原因Test Setup 导航失败。人工复刻进入页面选择 NTP。输入 NTP 地址保存刷新确认值已保存。用例 12Verify Setting Manual BMC Time测试目的手动设置时间并对比 CLI。自动化操作Test SetupSet Timezone...Setup To Power Off And Navigate。用例体点击手动模式。输入日期2023-05-12时间15:30。保存等待 120 秒。获取值与 CLI 对比。结果FAILSetup failed: ElementClickInterceptedException。失败原因Test Setup 导航失败。人工复刻进入页面选择手动设置日期时间保存等待SSH 对比。用例 13Verify Setting Invalid Date And Time Is Not Allowed测试目的输入非法日期时间验证报错。自动化操作Test SetupSetup To Power Off And Navigate。用例体点击手动模式。输入2023-18-48检查Invalid format消息。输入29:48再次检查。结果FAILElement with locator //input[data-test-iddateTime-input-manualDate] not found.。失败原因Test Setup 导航后页面未正确显示手动模式输入框可能导航未完成或模式未切换。人工复刻进入页面选择手动输入非法日期确认出现错误提示。用例 14Verify Changing BMC Time From NTP To Manual测试目的从 NTP 切换到手动模式。自动化操作Test SetupSetup To Power Off And Navigate。用例体添加 NTP 服务器time.google.com保存。切换到手动设置未来时间保存刷新验证。结果FAILSetup failed: ElementClickInterceptedException。失败原因Test Setup 导航失败。人工复刻进入页面配置 NTP保存。切换手动设置时间保存刷新确认。用例 15Verify Moving From Manual To NTP测试目的从手动切换到 NTP循环两次。自动化操作Test SetupSetup To Power Off And Navigate。用例体使用Switch From Manual To NTP模板循环${LOOP_COUNT}2次设置手动时间。切换到 NTP输入 NTP 地址216.239.35.0硬编码保存。等待同步验证 CLI 时间与页面显示。结果PASS。原因可能因为侧边栏在循环中恰好展开或点击被拦截后重试成功。但硬编码的 NTP 地址216.239.35.0是 Google 公共 NTP依赖外网。人工复刻进入页面手动设置未来时间保存。切换到 NTP输入216.239.35.0保存。等待通过 SSH 查看时间是否同步。总结与修复建议主要问题在于自动化操作时导航窗口有可能被折叠起来原有框架未考虑这一点。硬编码 NTP 地址216.239.35.0应改为测试参数由用户根据环境指定。文本检查用例 2 的第二段文字不存在需与当前 webui版本核对。用例11 12进行power server对服务器进行下电操作时等待过程逻辑发生变化。不适用于当前的webui版本