RobotFramework中Create Webdriver问题:下载exe及断言失败求助
刚好之前在项目里也碰到过类似的情况,给你整理两个问题的解决方案:
一、彻底规避Chrome的下载安全提示
要让Chrome自动下载exe且不弹出那个烦人的“This type of file can harm your computer”提示,关键是在ChromeOptions里配置几个安全浏览和下载相关的参数。在Robot Framework中使用Create Webdriver时,你可以这样传入这些配置:
${chrome_options}= Create Dictionary # 指定下载路径,避免弹出选择文件夹的窗口 Set To Dictionary ${chrome_options} download.default_directory ${你的本地下载路径} # 禁用下载确认弹窗 Set To Dictionary ${chrome_options} download.prompt_for_download False # 关闭安全浏览功能,不再标记exe为危险文件 Set To Dictionary ${chrome_options} safebrowsing.enabled False # 直接禁用下载保护提示,这是解决安全警告的核心参数 Set To Dictionary ${chrome_options} safebrowsing.disable_download_protection True # 创建带配置的Chrome驱动 Create Webdriver Chrome options=${chrome_options}
二、解决Create Webdriver导致的断言失败问题
你提到用Open Browser时设置超时、隐式等待和speed参数就能正常运行,但Create Webdriver不行——这是因为Open Browser帮你默认处理了这些等待配置,而Create Webdriver需要手动添加:
1. 配置隐式等待
创建完驱动后,立刻设置隐式等待,和Open Browser的implicit_wait参数效果完全一致:
# 设置全局隐式等待10秒,元素没出现时会自动等待,可根据你的场景调整时长 Set Selenium Implicit Wait 10
2. 替代speed参数的更优方案
speed参数是Open Browser独有的,用来控制每个关键字的执行间隔。用Create Webdriver时,不推荐用固定Sleep来模拟(太死板,容易浪费时间或等待不够),更推荐用显式等待来精准控制:
比如你要断言某个元素可见,不要直接用Element Should Be Visible,而是先用Wait Until Element Is Visible等待元素加载完成:
# 最多等待15秒,元素出现就立刻继续执行,超时才会报错 Wait Until Element Is Visible ${你的元素定位器} 15 # 再做断言 Element Should Be Visible ${你的元素定位器}
3. 设置页面加载超时
如果是页面加载太慢导致后续元素找不到,还可以设置页面加载超时:
# 设置页面加载超时30秒,避免一直等待页面加载 Set Selenium Page Load Timeout 30
额外小技巧:封装自定义关键字
为了避免每次创建驱动都重复写配置,你可以封装一个自定义关键字,把所有需要的配置都整合进去,用起来和Open Browser一样方便:
*** Keywords *** Open Chrome With Custom Config [Arguments] ${download_dir} ${implicit_wait}=10 ${page_load_timeout}=30 ${chrome_options}= Create Dictionary Set To Dictionary ${chrome_options} download.default_directory ${download_dir} Set To Dictionary ${chrome_options} download.prompt_for_download False Set To Dictionary ${chrome_options} safebrowsing.enabled False Set To Dictionary ${chrome_options} safebrowsing.disable_download_protection True Create Webdriver Chrome options=${chrome_options} Set Selenium Implicit Wait ${implicit_wait} Set Selenium Page Load Timeout ${page_load_timeout} [Return] ${DRIVER}
调用的时候只需要一行代码:
${driver}= Open Chrome With Custom Config C:\\TestDownloads
最后总结一下
- 通过配置ChromeOptions的安全浏览和下载参数,能彻底解决exe下载的安全提示问题
- 给
Create Webdriver补充隐式等待、页面加载超时,并用显式等待代替固定speed,就能解决断言失败的问题 - 封装自定义关键字可以让你的测试代码更简洁、复用性更强
内容的提问来源于stack exchange,提问作者GNUdelman

