Core/tests/AbstractSeleniumTestCase.php

79 lines
2.4 KiB
PHP
Raw Normal View History

<?php
2024-04-14 13:48:14 +00:00
declare(strict_types=1);
namespace Benzine\Tests;
2021-02-13 21:43:12 +00:00
use Benzine\App;
use Benzine\Services\EnvironmentService;
use Facebook\WebDriver\Remote\RemoteWebDriver;
2021-02-13 21:43:12 +00:00
use Facebook\WebDriver\Remote\RemoteWebElement;
use Facebook\WebDriver\Remote\WebDriverCapabilityType;
2021-02-13 21:43:12 +00:00
use Facebook\WebDriver\WebDriverBy;
use Monolog\Logger;
2020-09-01 16:31:46 +00:00
use Symfony\Component\Filesystem\Filesystem;
2020-09-01 03:15:02 +00:00
abstract class AbstractSeleniumTestCase extends AbstractBaseTestCase
{
2021-02-13 21:43:12 +00:00
protected static RemoteWebDriver $webDriver;
protected static EnvironmentService $environmentService;
protected static Logger $logger;
protected static string $screenshotsDir;
protected static int $screenshotIndex = 0;
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
2024-04-14 13:48:14 +00:00
self::$logger = App::DI(Logger::class);
2021-02-13 21:43:12 +00:00
self::$environmentService = App::DI(EnvironmentService::class);
2024-04-14 13:48:14 +00:00
$capabilities = [WebDriverCapabilityType::BROWSER_NAME => 'chrome'];
self::$webDriver = RemoteWebDriver::create(
2021-02-13 21:43:12 +00:00
sprintf(
'http://%s:%d/wd/hub',
self::$environmentService->get('SELENIUM_HOST', 'selenium'),
self::$environmentService->get('SELENIUM_PORT', 4444)
),
$capabilities,
60000,
60000
);
self::$webDriver->manage()->timeouts()->implicitlyWait(3);
2024-04-14 13:48:14 +00:00
self::$screenshotsDir = APP_ROOT . '/build/Screenshots/' . date('Y-m-d H-i-s') . '/';
}
public static function tearDownAfterClass(): void
{
self::$webDriver->close();
parent::tearDownAfterClass();
}
2021-02-13 21:43:12 +00:00
public function getWindow(): RemoteWebDriver
{
return self::$webDriver;
}
public function select(string $sizzleSelector): ?RemoteWebElement
{
try {
return self::$webDriver->findElement(WebDriverBy::cssSelector($sizzleSelector));
} catch (NoSuchElementException $noSuchElementException) {
self::$logger->debug("Couldn't find a match for sizzle selector '{$sizzleSelector}'");
return null;
}
}
protected function takeScreenshot($name): void
{
2021-02-13 21:43:12 +00:00
if (!(new Filesystem())->exists(self::$screenshotsDir)) {
2024-04-14 13:48:14 +00:00
(new Filesystem())->mkdir(self::$screenshotsDir, 0o777);
2021-02-13 21:43:12 +00:00
}
2024-04-14 13:48:14 +00:00
self::$webDriver->takeScreenshot(self::$screenshotsDir . self::$screenshotIndex . "_{$name}.jpg");
++self::$screenshotIndex;
}
}