我正在使用Cheezy的页面对象gem在docker容器中运行一些基于浏览器的UI测试。
以下是不起作用的有问题的代码:
file_field(:the_file, name: 'file_source')
def upload_file(csv_file)
puts "CURRENT DIR: #{Dir.pwd}"
self.the_file = Dir.pwd + "/config/data/#{csv_file}"
sleep(1)
upload_button
end
命令:
docker run -v `pwd`:/app ruby:2.4 bash -c "cd /app && bundle install && /app/cucumber-command.sh"
cucumber-command.sh:
cucumber RUN_ON_BSTACK=true --tags @send_request --format pretty --format junit --out results
错误:
CURRENT DIR: /app
...
invalid argument: File not found : /app/config/data/GDPR.csv
但是,该文件存在于容器中:
# ls -l /app/config/data/GDPR.csv
-rw-r--r-- 1 1000 staff 11602 Jul 11 03:05 /app/config/data/GDPR.csv
有问题的线路是这样的:
self.the_file = Dir.pwd + "/config/data/#{csv_file}"
如果我不在docker容器中运行它,这会很好
我发现一件有趣的事情是,当我给它另一条路径时,错误是不同的:
No such file or directory - /var/lib/jenkins/workspace/tests/config/data/GDPR.csv (Errno::ENOENT)
(eval):1:in `process_watir_call'
这似乎是找不到文件的真正错误。
file_field
在容器内执行时无法找到该文件。有人能帮我了解发生了什么以及如何解决这个问题吗?
事实上,我需要一个允许文件上传到远程系统(BrowserStack(上的文件检测器
这是我的hooks.rb中修复它的代码:
browser.driver.file_detector = lambda do |args|
str = args.first.to_s
str if File.exist?(str)
end