Robot Framework切换目录用什么关键字?如何重命名下载的CSV文件?
报错根因
Move File关键字默认基于当前执行目录(也就是你的.robot脚本所在目录)解析相对路径,你没有给oldfilename指定完整路径,所以框架会默认去脚本目录找该文件,自然找不到你存在${DIR}下的下载文件。
两种直接解决方法
1. (优先推荐)直接拼接完整路径,无需切换工作目录
你已经预定义了下载目录变量${DIR},直接给两个文件名都补全路径即可:
Move File ${DIR}\\old_default_filename.csv ${DIR}\\new_custom_filename.csv
该方法不会修改全局工作目录,不会影响后续其他相对路径操作,稳定性更高。
2. 切换工作目录后操作
如果需要临时切换当前工作目录到下载路径,可以调用OperatingSystem库的Set Working Directory关键字,后续的相对路径操作都会基于该目录执行:
Set Working Directory ${DIR} Move File old_default_filename.csv new_custom_filename.csv
更优实现方案
你的现有代码里有两个可以优化的点,能大幅降低执行失败概率:
- 硬等5s不可靠:如果网络慢、导出数据量大,下载耗时超过5s就会报错,建议用
Wait Until Created关键字等待文件生成 - 导出文件名动态:很多系统导出的文件名会带时间戳、随机后缀,没法提前知道准确的原文件名,可以先列出下载目录下所有.csv文件,取最新生成的那个作为原文件
优化后的完整代码如下:
*** Settings *** Library SeleniumLibrary Library OperatingSystem Library Collections *** Variables *** ${DIR} C:\\Users\\xxxxx\\Reports ${DOWNLOAD_TIMEOUT} 30s *** Test Cases *** Sample exporting of csv file Empty Directory ${DIR} ${prefs} = Create Dictionary download.default_directory=${DIR} Open Browser https://xxxxxxxxxxxxxxxxx.com headlesschrome executable_path=${BROWSERDRI} options=add_experimental_option("prefs",${prefs}) Input Text //*[@id="name"] xxxxx Input Password //*[@id="password"] xxxxx Click Button //*[@id="button_primary"] Click Element //*[@id="content-header"]/div/span[3]/a/div Click Element //*[@id="exportDropdown"]/ul/li[3]/a Click Link //*[@id="exportCsvColumns_control"]/div/div[1]/div/a[2] Click Button //*[@id="exportSubmit"] # 等待目录下生成.csv文件,替代硬等待 Wait Until Created ${DIR}\\*.csv timeout=${DOWNLOAD_TIMEOUT} # 获取目录下所有csv文件,取最新的一个 ${all_csv_files}= List Files In Directory ${DIR} *.csv absolute=True ${latest_file}= Get From List ${all_csv_files} 0 # 重命名文件 Move File ${latest_file} ${DIR}\\自定义的新文件名.csv Close Browser
内容的提问来源于stack exchange,提问作者romsky
相关产品推荐
相关产品推荐

