Behat附件文件不起作用

时间:2013-09-04 08:34:47

标签: behat mink

我正在使用'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');

4 个答案:

答案 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');