I use docker on Windows to drive a Google chrome navigator to test pages on my local webapp. Everything works perfectly but I got a problem when I need to insert an image.jpg into a file field.
When I tried to fix this, I create a blank page with only a html field
This scenario works on a Linux VM !
Console Error :
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:
features\1234-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);
}
In this function, the problem is at the last line $this->getSession()->getPage()->attachFileToField(). The rest is working.
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
In English 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
The scenario crash at "When I add in the file field the file 'PATH TO IMAGE'
I've tried many path:
'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'
With simple quote and double quote and every kind of notation that probably exist. I try to add a files_path my behat.yml as mentioned in other topics to only set the image.jpg without the complete path.
My English is probably not very good but I've tried Thanks you
To solve my problem, I just simply install Debian from the Windows Store and I execute the feature in my Debian console.
It work perfectly.