lmc-eu / steward

PHP libraries that makes Selenium WebDriver + PHPUnit functional testing easy and robust
MIT License
221 stars 40 forks source link

can not set custom capabilities #174

Closed q-jack closed 6 years ago

q-jack commented 6 years ago

I got this message after running a test with custom caps

selenium-tests\vendor\bin>steward run staging firefox --pattern CreateStudyTest.php --filter testCreateStudy -vvv

Fatal error: Uncaught TypeError: Argument 3 passed to Lmc\Steward\Listener\WebDriverListener::createWebDriver() must be an instance of Facebook\WebDriver\Remote\DesiredCapabilities, null given, called in C:\xampp\htdocs\portal\app\webroot\selenium-tests\vendor\lmc\steward\src\Listener\WebDriverListener.php on line 99 and defined in C:\xampp\htdocs\portal\app\webroot\selenium-tests\vendor\lmc\steward\src\Listener\WebDriverListener.php:156

This is how my capabilityresolver look like

namespace My\Steward;

use Facebook\WebDriver\Firefox\FirefoxProfile;
use Facebook\WebDriver\Firefox\FirefoxDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Lmc\Steward\ConfigProvider;
use Lmc\Steward\Selenium\CustomCapabilitiesResolverInterface;
use Lmc\Steward\Test\AbstractTestCase;

class CustomCapabilitiesResolver implements CustomCapabilitiesResolverInterface
{
    public function __construct(ConfigProvider $config)
    {
    }

    public function resolveDesiredCapabilities(AbstractTestCase $test, DesiredCapabilities $capabilities)
    {
        $profile = new FirefoxProfile();
        $capabilities = DesiredCapabilities::firefox();
        $capabilities->setCapability(FirefoxDriver::PROFILE, $profile);
        $capabilities->setCapability('loggingPrefs', 'trace');
    }

    public function resolveRequiredCapabilities(AbstractTestCase $test, DesiredCapabilities $capabilities)
    {
        return $capabilities;
    }
}
OndraM commented 6 years ago

Hi @q-jack , it looks like you are missing return $capabilities; on the end of resolveDesiredCapabilities method.

OndraM commented 6 years ago

Aw, there happen to be a bug in the wiki page explaining this https://github.com/lmc-eu/steward/wiki/Set-custom-capabilities/

I fixed it there as well :).

OndraM commented 6 years ago

If you need to set the logs level for Firefox (via GeckoDriver), your custom capabilities resolver could look like this:

    public function resolveDesiredCapabilities(AbstractTestCase $test, DesiredCapabilities $capabilities)
    {
        $capabilities->setCapability(
            'moz:firefoxOptions',
            ['log' => ['level' => 'trace']]
        );

        return $capabilities;
    }
q-jack commented 6 years ago

Sorry for bringing it up again, but is the syntax for the chrome log level different?

OndraM commented 6 years ago

@q-jack Yes, it looks chrome still uses settings in JsonWire format: https://sites.google.com/a/chromium.org/chromedriver/capabilities

https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities#loggingpreferences-json-object

So you may try using this format for Chrome.