我正在使用'selenium2'驱动程序并尝试测试文件上传表单输入字段但是收到错误
Exception thrown by (//html/descendant-or-self::*[@id = 'ImageID'])[1]
'D:/looks.jpg' does not exist on the file system
我的代码在FeatureContex.php中如下所示
> $page = $this->getSession()->getPage();
> $element = $page->find('css', '#ImageID');
> $element->attachFile('D:/looks.jpg');
答案 0 :(得分:5)
你定义了files_path吗?我的是behat.yml。 如果您已经定义了这个,那么您只提供应该在定义的文件夹中存在的文件名。
default:
context:
class: 'FeatureContext'
extensions:
Behat\MinkExtension\Extension:
files_path: '/var/www/project/public/images'
base_url: 'https://local.dev'
答案 1 :(得分:3)
这里,这段代码是behat和mink的默认代码。试试这个。
/**
* Attaches file to field with specified id|name|label|value.
*
* @When /^(?:|I )attach the file "(?P<path>[^"]*)" to "(?P<field>(?:[^"]|\\")*)"$/
*/
public function attachFileToField($field, $path)
{
$field = $this->fixStepArgument($field);
if ($this->getMinkParameter('files_path')) {
$fullPath = rtrim(realpath($this->getMinkParameter('files_path')), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$path;
if (is_file($fullPath)) {
$path = $fullPath;
}
}
$this->getSession()->getPage()->attachFileToField($field, $path);
}
答案 2 :(得分:1)
在指定文件夹之前尝试使用%paths.base%。在我的情况下,我将其称为“媒体”,它位于功能文件夹中。
default:
extensions:
Behat\MinkExtension:
files_path: "%paths.base%/media/"
从功能我指定文件名,即
When I add cover art "wrongCoverArt.jpg"
接收文件名如下:
class TypeMeContext extends RawMinkContext implements Context, SnippetAcceptingContext
...
/**
* @When I add cover art :arg1
*/
public function iAddCoverArt($arg1)
{
$this->uploader->addCoverArt($arg1);
}
和
class Whatever extends Page
...
/**
* @param string $fileName
*/
public function addCoverArt($fileName)
{
$id = 'cover-art-uploader';
$this->attachFileToField($id, $fileName);
}
答案 3 :(得分:-2)
这是一个非常简单的原因,为什么你的代码可能不起作用,但你的目录斜杠是错误的。使用D:表示窗口,你使用的斜杠是/(* nix,mac等)......
所以尝试替换
$element->attachFile('D:/looks.jpg');
与
$element->attachFile('D:\looks.jpg');