当我想使用 attachFileToField 函数将文件上传到字段时如何修复 "unexpected token"?行为水貂

How to fix "unexpected token" when I want to upload a file into a field with the function attachFileToField? Behat Mink

我在 Windows 上使用 docker 来驱动 Google chrome 导航器来测试我本地 webapp 上的页面。 一切正常,但当我需要将 image.jpg 插入文件字段时遇到问题。

当我试图解决这个问题时,我创建了一个只有 html 字段的空白页面

此方案适用于 Linux 虚拟机!

控制台错误

    Quand je rajoute dans le champ file le fichier 'C:\dev\tests\tmp\photos\potato.jpg' # FeatureContext::jeRajouteDansLeChampFileLeFichier()
      Behat\Mink\Exception\DriverException: SyntaxError: Invalid or unexpected token in vendor\dmore\chrome-mink-driver\src\ChromeDriver.php:1000
      Stack trace:
      #0 vendor\dmore\chrome-mink-driver\src\ChromeDriver.php(511): DMore\ChromeDriver\ChromeDriver->evaluateScript('var xpath_resul...')
      #1 vendor\behat\mink\src\Driver\CoreDriver.php(101): DMore\ChromeDriver\ChromeDriver->findElementXpaths('//html/.//*\r\n[s...')
      #2 vendor\behat\mink\src\Element\Element.php(168): Behat\Mink\Driver\CoreDriver->find('//html/.//*\r\n[s...')
      #3 vendor\behat\mink\src\Element\Element.php(157): Behat\Mink\Element\Element->findAll('named_exact', Array)
      #4 vendor\behat\mink\src\Element\Element.php(146): Behat\Mink\Element\Element->findAll('named', Array)
      #5 vendor\behat\mink\src\Element\TraversableElement.php(139): Behat\Mink\Element\Element->find('named', Array)
      #6 vendor\behat\mink\src\Element\TraversableElement.php(289): Behat\Mink\Element\TraversableElement->findField('monUpload')
      #7 features\bootstrap\FeatureContext.php(536): Behat\Mink\Element\TraversableElement->attachFileToField('monUpload', 'C:\dev\test...')
      #8 [internal function]: FeatureContext->jeRajouteDansLeChampFileLeFichier('C:\dev\test...')
      #9 vendor\behat\behat\src\Behat\Testwork\Call\Handler\RuntimeCallHandler.php(109): call_user_func_array(Array, Array)
      #10 vendor\behat\behat\src\Behat\Testwork\Call\Handler\RuntimeCallHandler.php(64): Behat\Testwork\Call\Handler\RuntimeCallHandler->executeCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
      #11 vendor\behat\behat\src\Behat\Testwork\Call\CallCenter.php(140): Behat\Testwork\Call\Handler\RuntimeCallHandler->handleCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
      #12 vendor\behat\behat\src\Behat\Testwork\Call\CallCenter.php(96): Behat\Testwork\Call\CallCenter->handleCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
      #13 vendor\behat\behat\src\Behat\Behat\Tester\Runtime\RuntimeStepTester.php(125): Behat\Testwork\Call\CallCenter->makeCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
      #14 vendor\behat\behat\src\Behat\Behat\Tester\Runtime\RuntimeStepTester.php(73): Behat\Behat\Tester\Runtime\RuntimeStepTester->testDefinition(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), Object(Behat\Behat\Definition\SearchResult), false)
      #15 vendor\behat\behat\src\Behat\Behat\Hook\Tester\HookableStepTester.php(74): Behat\Behat\Tester\Runtime\RuntimeStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
      #16 vendor\behat\behat\src\Behat\Behat\EventDispatcher\Tester\EventDispatchingStepTester.php(73): Behat\Behat\Hook\Tester\HookableStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
      #17 vendor\behat\behat\src\Behat\Behat\Tester\StepContainerTester.php(59): Behat\Behat\EventDispatcher\Tester\EventDispatchingStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
      #18 vendor\behat\behat\src\Behat\Behat\Tester\Runtime\RuntimeScenarioTester.php(76): Behat\Behat\Tester\StepContainerTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
      #19 vendor\behat\behat\src\Behat\Behat\Hook\Tester\HookableScenarioTester.php(74): Behat\Behat\Tester\Runtime\RuntimeScenarioTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
      #20 vendor\behat\behat\src\Behat\Behat\EventDispatcher\Tester\EventDispatchingScenarioTester.php(103): Behat\Behat\Hook\Tester\HookableScenarioTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
      #21 vendor\behat\behat\src\Behat\Behat\Tester\Runtime\IsolatingScenarioTester.php(69): Behat\Behat\EventDispatcher\Tester\EventDispatchingScenarioTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
      #22 vendor\behat\behat\src\Behat\Behat\Tester\Runtime\RuntimeFeatureTester.php(84): Behat\Behat\Tester\Runtime\IsolatingScenarioTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
      #23 vendor\behat\behat\src\Behat\Behat\Hook\Tester\HookableFeatureTester.php(72): Behat\Behat\Tester\Runtime\RuntimeFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
      #24 vendor\behat\behat\src\Behat\Behat\EventDispatcher\Tester\EventDispatchingFeatureTester.php(71): Behat\Behat\Hook\Tester\HookableFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
      #25 vendor\behat\behat\src\Behat\Testwork\Tester\Runtime\RuntimeSuiteTester.php(63): Behat\Behat\EventDispatcher\Tester\EventDispatchingFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
      #26 vendor\behat\behat\src\Behat\Testwork\Hook\Tester\HookableSuiteTester.php(73): Behat\Testwork\Tester\Runtime\RuntimeSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
      #27 vendor\behat\behat\src\Behat\Testwork\EventDispatcher\Tester\EventDispatchingSuiteTester.php(72): Behat\Testwork\Hook\Tester\HookableSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
      #28 vendor\behat\behat\src\Behat\Testwork\Tester\Runtime\RuntimeExercise.php(71): Behat\Testwork\EventDispatcher\Tester\EventDispatchingSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
      #29 vendor\behat\behat\src\Behat\Testwork\EventDispatcher\Tester\EventDispatchingExercise.php(70): Behat\Testwork\Tester\Runtime\RuntimeExercise->test(Array, false)
      #30 vendor\behat\behat\src\Behat\Testwork\Ordering\OrderedExercise.php(80): Behat\Testwork\EventDispatcher\Tester\EventDispatchingExercise->test(Array, false)
      #31 vendor\behat\behat\src\Behat\Testwork\Tester\Cli\ExerciseController.php(149): Behat\Testwork\Ordering\OrderedExercise->test(Array, false)
      #32 vendor\behat\behat\src\Behat\Testwork\Tester\Cli\ExerciseController.php(108): Behat\Testwork\Tester\Cli\ExerciseController->testSpecifications(Object(Symfony\Component\Console\Input\ArgvInput), Array)
      #33 vendor\behat\behat\src\Behat\Testwork\Cli\Command.php(63): Behat\Testwork\Tester\Cli\ExerciseController->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #34 vendor\symfony\console\Command\Command.php(255): Behat\Testwork\Cli\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #35 vendor\symfony\console\Application.php(915): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #36 vendor\symfony\console\Application.php(272): Symfony\Component\Console\Application->doRunCommand(Object(Behat\Testwork\Cli\Command), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #37 vendor\behat\behat\src\Behat\Testwork\Cli\Application.php(124): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #38 vendor\symfony\console\Application.php(148): Behat\Testwork\Cli\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #39 vendor\behat\behat\bin\behat(34): Symfony\Component\Console\Application->run()
      #40 {main}
    Et j'attends 10 secondes                                                                  # FeatureContext::jAttendsSecondes()
    Et j'exectute le code javascript "uploader.upload();"                                     # FeatureContext::jexectuteLeCodeJavascript()
    Et j'attends 5 secondes                                                                   # FeatureContext::jAttendsSecondes()

--- Scénarios échoués:

    features34-testUpload.feature:6

1 scénario (1 échecs)
6 étapes (2 succès, 1 échecs, 3 ignorés)
0m1.41s (10.42Mb)

composer.json :

{   
    "require": {       
    "behat/behat": "~3.5",      
    "behat/mink": "~1.7@dev",              
    "behat/mink-goutte-driver": "1.2.1",       
    "behat/mink-selenium2-driver": "~1.3.1" ,
    "behat/mink-extension": "*",
    "dmore/chrome-mink-driver":"*",
    "dmore/behat-chrome-extension": "*",
        "symfony/css-selector": "^4.3",
        "symfony/phpunit-bridge": "^4.3"
    },   
    "config": {       
        "bin-dir": "bin/"  
    }
}

featurecontext.php :

    /**
     * @When je rajoute dans le champ file le fichier :arg1
     */
    public function jeRajouteDansLeChampFileLeFichier($arg1)
    {
        $javascipt = <<<HEREDOC
        var elemnt = document.querySelector('input[type="file"] ');
        elemnt.setAttribute('name', 'monUpload');
        elemnt.setAttribute('visibility', 'visible');
HEREDOC;
        $this->getSession()->executeScript($javascipt);
        $this->getSession()->wait( 100 );
        $this->getSession()->getPage()->attachFileToField('monUpload', $arg1);
    }

在这个函数中,问题出在最后一行$this->getSession()->getPage()->attachFileToField()。其余的工作。

feature.feature :

Scénario: Upload Test
    Etant donné que je suis sur "A LOCALHOST URL"
    Et j'attends 1 secondes
    Quand je rajoute dans le champ file le fichier 'potato.jpg'
    Et j'attends 3 secondes

英文feature.feature:

Scenario : Upload Test
Since I'm on "A LOCALHOST URL"
I wait 1 second
When I add in the file field the file 'potato.jpg'
I wait 1 seconds

当我在文件字段中添加文件 'PATH TO IMAGE'

时场景崩溃

我试过很多路:

'C:\dev\potato.jpg'
'\C:\dev\potato.jpg'
'file:\\C:\dev\potato.jpg'
'C\dev\potato.jpg'
'/C/dev/potato.jpg'
'/c/dev/potato.jpg'

带有单引号和双引号以及可能存在的各种符号。 我尝试添加一个 files_path 我的 behat.yml 正如其他主题中提到的那样只设置 image.jpg 没有完整的路径。

我的英语可能不是很好,但我已经尝试过了 谢谢你

为了解决我的问题,我只是简单地从 Windows 商店安装 Debian,然后在我的 Debian 控制台中执行该功能。

完美运行。