本地通过的文件上传场景在EC2部署的Jenkins上失败求助
解决EC2 Jenkins环境下Selenium文件上传路径问题
问题分析
从报错信息可见,系统尝试访问路径/var/lib/jenkins/workspace/HE_HQ_Automaton/src/test.Files/putty.exe但未找到文件,核心问题是文件实际存储路径与代码拼接路径不匹配,或文件未被正确同步到Jenkins工作目录。
排查与解决步骤
1. 确认文件是否存在于Jenkins工作目录
登录EC2实例,直接检查目标路径的文件状态:
ls -l /var/lib/jenkins/workspace/HE_HQ_Automaton/src/test.Files/
- 若文件不存在:
- 检查代码仓库中
src/test.Files/目录是否包含目标文件,确保版本控制工具(如Git)已提交并推送该文件。 - 查看Jenkins构建日志,确认拉取代码时该文件是否被成功下载到工作目录。
- 检查代码仓库中
2. 修正路径拼接逻辑
代码中使用System.getProperty("user.dir")获取工作目录,在Jenkins环境下该值即为/var/lib/jenkins/workspace/HE_HQ_Automaton/,需注意以下细节:
- 检查目录/文件名拼写:Linux系统路径区分大小写,确认
test.Files、BUG PnUMBER CHAR.png的拼写与实际文件完全一致。 - 替换硬编码路径分隔符:用
File.separator代替/,保证跨平台兼容:public void sendPNGFileUpload() { Driver.wait(2); String filePath = System.getProperty("user.dir") + File.separator + "src" + File.separator + "test.Files" + File.separator + "BUG PnUMBER CHAR.png"; driver.findElement(chooseFileButton).sendKeys(filePath); Driver.wait(2); } - 更推荐使用
Paths类构建路径,避免拼接错误:import java.nio.file.Paths; public void sendPNGFileUpload() { Driver.wait(2); String filePath = Paths.get(System.getProperty("user.dir"), "src", "test.Files", "BUG PnUMBER CHAR.png").toString(); driver.findElement(chooseFileButton).sendKeys(filePath); Driver.wait(2); }
3. 检查Jenkins用户权限
Jenkins运行用户(通常为jenkins)需具备目标文件的访问权限:
sudo -u jenkins ls -l /var/lib/jenkins/workspace/HE_HQ_Automaton/src/test.Files/BUG\ PnUMBER\ CHAR.png
若权限不足,修改文件权限:
chmod 644 /var/lib/jenkins/workspace/HE_HQ_Automaton/src/test.Files/BUG\ PnUMBER\ CHAR.png
4. 绝对路径测试验证
若以上方法无效,可直接使用绝对路径测试,确认文件是否可被访问:
public void sendPNGFileUpload() { Driver.wait(2); driver.findElement(chooseFileButton).sendKeys("/var/lib/jenkins/workspace/HE_HQ_Automaton/src/test.Files/BUG PnUMBER CHAR.png"); Driver.wait(2); }
如果此方法生效,说明System.getProperty("user.dir")取值不符合预期,可在代码中打印该值确认:
System.out.println("当前工作目录:" + System.getProperty("user.dir"));
查看Jenkins构建日志的输出,核对工作目录是否正确。
内容的提问来源于stack exchange,提问作者Pathfinder
相关产品推荐
相关产品推荐

