如何通过SeleniumLibrary与Robot Framework检查新标签页中.doc文档的文本
解决Robot Framework检查新标签页.doc文档标题的问题
我之前也踩过这个坑——普通的Element text should be、Page should contain这类关键字对浏览器打开的.doc文档完全没用,核心原因是:.doc不是HTML页面,浏览器打开它时要么用内置的文档查看器(DOM结构和普通网页完全不同),要么调用在线Office工具(比如Office Online、Google Docs),常规的HTML元素定位方法根本不适用。下面给你两种可行的解决方案,根据你的实际情况选:
方案一:检查浏览器标签页的标题(最简单通用)
当浏览器在线打开.doc文档时,标签页的标题通常会包含文档本身的标题(比如Welcome.doc - Chrome或者Welcome - Google Docs),我们可以通过获取标签页标题来验证是否包含"Welcome":
# 1. 点击打开.doc的链接(假设你已经有这一步) Click Link //a[@href='your-doc-url.doc'] # 2. 获取所有窗口句柄,切换到新打开的标签页 ${window_handles}= Get Window Handles Switch Window ${window_handles}[1] # 索引1对应新标签页,若之前有其他标签页可能需要调整索引 # 3. 获取当前标签页标题并检查是否包含目标文本 ${current_title}= Get Window Title Should Contain ${current_title} Welcome
方案二:针对在线Office查看器(精准定位文档标题)
如果你的.doc是通过Office Online、Google Docs这类在线工具打开的,页面是标准HTML结构,那可以直接定位到页面里的文档标题元素:
Office Online 示例:
# 先切换到新标签页 ${window_handles}= Get Window Handles Switch Window ${window_handles}[1] # 等待标题元素加载完成(避免元素未找到报错) Wait Until Element Is Visible //div[@class='wac-title'] 10s # 获取标题文本并验证 ${doc_title}= Get Text //div[@class='wac-title'] Should Contain ${doc_title} Welcome
Google Docs 示例:
Switch Window ${window_handles}[1] Wait Until Element Is Visible //input[@aria-label='Document title'] 10s ${doc_title}= Get Attribute //input[@aria-label='Document title'] value Should Contain ${doc_title} Welcome
前置注意事项:确保浏览器在线打开文档而非下载
有些浏览器默认会直接下载.doc而不是在线打开,这时候需要先配置浏览器偏好,强制在线打开:
以Chrome为例,设置MIME类型关联:
${chrome_options}= Evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys # 配置MIME类型,让浏览器在线打开doc/docx ${prefs}= Create Dictionary \ download.prompt_for_download=False \ download.default_directory=${EXECDIR}/downloads \ application/msword=application/vnd.openxmlformats-officedocument.wordprocessingml.document \ plugins.always_open_pdf_externally=False Call Method ${chrome_options} add_experimental_option prefs ${prefs} # 初始化带配置的浏览器 Create Webdriver Chrome chrome_options=${chrome_options}
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

