behat-panther-extension icon indicating copy to clipboard operation
behat-panther-extension copied to clipboard

goog:chromeOptions throwing fatal error?

Open validaide-mark-bijl opened this issue 9 months ago • 1 comments

Dear Robert,

First of all thank you for making this package! We are trying out this package as a replacement for our Selenium approach. Everything appeared to work fine as a drop-in replacement, until we attempted to configure the Chrome download directory to test for downloads.

When we configure the 'goog:chromeOptions' as described:

...
        javascript_chrome:
          panther:
            options:
              browser: 'chrome'
              webServerDir: '%paths.base%/public'
            manager_options:
              connection_timeout_in_ms: 5000
              request_timeout_in_ms: 120000
              chromedriver_arguments:
                - --window-size=1280,1600
                - --log-path=var/build/chromedriver.log
#                - --verbose
              capabilities:
                goog:chromeOptions:
                  prefs:
                    download.default_directory: 'var/build'
...

we get the following error:

Behat\Testwork\Call\Exception\FatalThrowableError: Fatal error: Call to a member function addArguments() on array in vendor/symfony/panther/src/ProcessManager/ChromeManager.php:68

Now either we're overlooking something in our YML file, or could it be that something is amiss in the processing of the 'goog:chromeOptions' part?

It seems here:

vendor/symfony/panther/src/ProcessManager/ChromeManager.php

...
 if ($this->arguments) {
            $chromeOptions = $capabilities->getCapability(ChromeOptions::CAPABILITY);
            if (null === $chromeOptions) {
                $chromeOptions = new ChromeOptions();
                $capabilities->setCapability(ChromeOptions::CAPABILITY, $chromeOptions);
            }
            $chromeOptions->addArguments($this->arguments);

            if (isset($_SERVER['PANTHER_CHROME_BINARY'])) {
                $chromeOptions->setBinary($_SERVER['PANTHER_CHROME_BINARY']);
            }
        }
...

That this statement $chromeOptions = $capabilities->getCapability(ChromeOptions::CAPABILITY); returns an array, and not a ChromeOptions object..?

Are we doing something wrong on our end, and if so, could you help us point out the mistake, or... is something not adding up?

Your help much appreciated! Thanks, Mark

validaide-mark-bijl avatar May 03 '24 14:05 validaide-mark-bijl

Hi Mark,

at first: Thank you for trying out and your issue!

I ran into the same problem.

Besides symfony/panther it has also something to do by new release 1.15.0 of php-webdriver. I think this commit introduced a breaking change for us: https://github.com/php-webdriver/php-webdriver/commit/235c2aa07f9e2686f2b876083fc081b00d330d48 with this issue: https://github.com/php-webdriver/php-webdriver/pull/1063 See for full changelog: https://github.com/php-webdriver/php-webdriver/compare/1.14.0...1.15.0

My workaround for now is/was to pin php-webdriver to 1.14.0:

    ...
    "require-dev": {
        ...
        "php-webdriver/webdriver": "1.14.0",
        ...

Actually I am preparing a new release to support >=1.15.0 of php-webdriver.

robertfausk avatar May 07 '24 07:05 robertfausk

Just released v1.1.3. @validaide-mark-bijl Pls reopen if you still encouter issues.

robertfausk avatar May 07 '24 18:05 robertfausk