diff --git a/CHANGELOG.md b/CHANGELOG.md index e8ccb7ef..e4a94f6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ CHANGELOG 2.2.0 ----- -* Add a `PANTHER_REDUCED_MOTION` environment variable to instruct the website to minimize the amount of non-essential movement +* Add a `PANTHER_NO_REDUCED_MOTION` environment variable to instruct the website to disable the reduction of non-essential movement 2.1.2 ----- diff --git a/README.md b/README.md index 1dddd274..8b287755 100644 --- a/README.md +++ b/README.md @@ -366,7 +366,7 @@ The following environment variables can be set to change some Panther's behavior * `PANTHER_ERROR_SCREENSHOT_DIR`: to set a base directory for your failure/error screenshots (e.g. `./var/error-screenshots`) * `PANTHER_DEVTOOLS`: to toggle the browser's dev tools (default `enabled`, useful to debug) * `PANTHER_ERROR_SCREENSHOT_ATTACH`: to add screenshots mentioned above to test output in junit attachment format -* `PANTHER_REDUCED_MOTION`: to instruct the website to minimize the amount of non-essential movement +* `PANTHER_NO_REDUCED_MOTION`: to instruct the website to disable the reduction of non-essential movement ### Changing the Hostname and Port of the Built-in Web Server diff --git a/src/ProcessManager/ChromeManager.php b/src/ProcessManager/ChromeManager.php index 7d4ded8b..79652492 100644 --- a/src/ProcessManager/ChromeManager.php +++ b/src/ProcessManager/ChromeManager.php @@ -116,7 +116,7 @@ private function getDefaultArguments(): array } // Prefer reduced motion, see https://developer.mozilla.org/fr/docs/Web/CSS/@media/prefers-reduced-motion - if (filter_var($_SERVER['PANTHER_REDUCED_MOTION'] ?? true, \FILTER_VALIDATE_BOOLEAN)) { + if (!filter_var($_SERVER['PANTHER_NO_REDUCED_MOTION'] ?? false, \FILTER_VALIDATE_BOOLEAN)) { $args[] = '--force-prefers-reduced-motion'; } diff --git a/src/ProcessManager/FirefoxManager.php b/src/ProcessManager/FirefoxManager.php index 659ec562..1de4503f 100644 --- a/src/ProcessManager/FirefoxManager.php +++ b/src/ProcessManager/FirefoxManager.php @@ -66,11 +66,12 @@ public function start(): WebDriver $capabilities->setCapability('moz:firefoxOptions', $firefoxOptions); // Prefer reduced motion, see https://developer.mozilla.org/fr/docs/Web/CSS/@media/prefers-reduced-motion - if (filter_var($_SERVER['PANTHER_REDUCED_MOTION'] ?? true, \FILTER_VALIDATE_BOOLEAN)) { + if (!filter_var($_SERVER['PANTHER_NO_REDUCED_MOTION'] ?? false, \FILTER_VALIDATE_BOOLEAN)) { /** @var FirefoxOptions|array $firefoxOptions */ $firefoxOptions = $capabilities->getCapability('moz:firefoxOptions') ?? []; $firefoxOptions = $firefoxOptions instanceof FirefoxOptions ? $firefoxOptions->toArray() : $firefoxOptions; - $firefoxOptions['prefs']['ui.prefersReducedMotion'] = 'reduced'; + $firefoxOptions['prefs']['ui.prefersReducedMotion'] = 1; + $capabilities->setCapability('moz:firefoxOptions', $firefoxOptions); } foreach ($this->options['capabilities'] as $capability => $value) { diff --git a/tests/ClientTest.php b/tests/ClientTest.php index 773d3037..ab7497fa 100644 --- a/tests/ClientTest.php +++ b/tests/ClientTest.php @@ -13,6 +13,7 @@ namespace Symfony\Component\Panther\Tests; +use Facebook\WebDriver\Exception\ElementClickInterceptedException; use Facebook\WebDriver\Exception\InvalidSelectorException; use Facebook\WebDriver\Exception\StaleElementReferenceException; use Facebook\WebDriver\Exception\TimeoutException; @@ -577,4 +578,36 @@ public function testCreateHttpBrowserClientWithInvalidHttpClientOptions(): void 'http_client_options' => 'bad http client option data type', ]); } + + /** + * @dataProvider providePrefersReducedMotion + */ + public function testPrefersReducedMotion(string $browser): void + { + $client = self::createPantherClient(['browser' => $browser]); + $client->request('GET', '/prefers-reduced-motion.html'); + + $client->clickLink('Click me!'); + $this->assertStringEndsWith('#clicked', $client->getCurrentURL()); + } + + /** + * @dataProvider providePrefersReducedMotion + */ + public function testPrefersReducedMotionDisabled(string $browser): void + { + $this->expectException(ElementClickInterceptedException::class); + + $_SERVER['PANTHER_NO_REDUCED_MOTION'] = true; + $client = self::createPantherClient(['browser' => $browser]); + $client->request('GET', '/prefers-reduced-motion.html'); + + $client->clickLink('Click me!'); + } + + public function providePrefersReducedMotion(): iterable + { + yield 'Chrome' => [PantherTestCase::CHROME]; + yield 'Firefox' => [PantherTestCase::FIREFOX]; + } } diff --git a/tests/fixtures/prefers-reduced-motion.html b/tests/fixtures/prefers-reduced-motion.html new file mode 100644 index 00000000..d13e1621 --- /dev/null +++ b/tests/fixtures/prefers-reduced-motion.html @@ -0,0 +1,38 @@ + + +
+ +