gpt4 book ai didi

php - Behat Mink文件上传未在提交时找到文件

转载 作者:行者123 更新时间:2023-12-02 18:11:57 25 4
gpt4 key购买 nike

我正在尝试在Symfony应用程序中使用带有Behat的Selenium / Mink测试图像上传。该应用程序在Docker容器中运行。

我将文件直接附加到输入的NodeElement上,而不是使用$driver->attachFileToField('#id-of-input', $filePath),因为我们正在处理上下文中的许多输入,并且在调用方法中已经具有输入:

$input->attachFile($this->filesPath . '1.jpg');

结果路径为:
/var/www/html/src/Resources/TestImages/1.jpg

该文件肯定存在于Docker容器中的该路径处,但是在提交表单时会引发此错误:

Your file was not found

没有有用的日志。

我尝试在 files_path中设置 behat.yml参数,但是在测试运行期间出现错误:
unknown error: path is not absolute: 3.jpg

我想念什么吗?容器的文件路径不正确吗?

我尝试在机器上使用abs路径无济于事(尽管这种方法存在严重缺陷,所以我很高兴这不是解决方案):
/Users/its.me/Sites/kbs/src/Resources/TestImages/1.jpg

本地 Users目录也已安装到我的docker-machine中,因此abs路径可在主机上工作。我以为可能与权限相关,所以我将它们全部设置为读/写/执行,但没有雪茄!相对路径不起作用。

我的图片在哪里?

最佳答案

基于issue posted by @lauda at GitHub,MinkSeleniumDriver需要进行一些文件准备才能正常工作。即,将其转换为zip文件。 This comment帮助了:

$localFile = $this->filesPath . '01.jpg';
$tempZip = tempnam('', 'WebDriverZip');
$zip = new \ZipArchive();
$zip->open($tempZip, \ZipArchive::CREATE);
$zip->addFile($localFile, basename($localFile));
$zip->close();

$remotePath = $this->getSession()->getDriver()->getWebDriverSession()->file([
'file' => base64_encode(file_get_contents($tempZip))
]);

$input->attachFile($remotePath);
unlink($tempZip);

上面的代码基于 upload() 中的 facebook/php-webdriver方法:
 /**
* Upload a local file to the server
*
* @param string $local_file
*
* @throws WebDriverException
* @return string The remote path of the file.
*/
private function upload($local_file) {
if (!is_file($local_file)) {
throw new WebDriverException("You may only upload files: " . $local_file);
}
// Create a temporary file in the system temp directory.
$temp_zip = tempnam('', 'WebDriverZip');
$zip = new ZipArchive();
if ($zip->open($temp_zip, ZipArchive::CREATE) !== true) {
return false;
}
$info = pathinfo($local_file);
$file_name = $info['basename'];
$zip->addFile($local_file, $file_name);
$zip->close();
$params = array(
'file' => base64_encode(file_get_contents($temp_zip)),
);
$remote_path = $this->executor->execute(
DriverCommand::UPLOAD_FILE,
$params
);
unlink($temp_zip);
return $remote_path;
}

关于php - Behat Mink文件上传未在提交时找到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42114026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com