Improve selenium webdriver support.
This commit is contained in:
parent
177c7dacd0
commit
6737e4f76f
1 changed files with 37 additions and 10 deletions
|
|
@ -2,26 +2,37 @@
|
|||
|
||||
namespace Benzine\Tests;
|
||||
|
||||
use Benzine\App;
|
||||
use Benzine\Services\EnvironmentService;
|
||||
use Facebook\WebDriver\Remote\RemoteWebDriver;
|
||||
use Facebook\WebDriver\Remote\RemoteWebElement;
|
||||
use Facebook\WebDriver\Remote\WebDriverCapabilityType;
|
||||
use Facebook\WebDriver\WebDriverBy;
|
||||
use Monolog\Logger;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
|
||||
abstract class AbstractSeleniumTestCase extends AbstractBaseTestCase
|
||||
{
|
||||
/** @var RemoteWebDriver */
|
||||
protected static $webDriver;
|
||||
|
||||
protected static $screenshotsDir;
|
||||
|
||||
protected static $screenshotIndex = 0;
|
||||
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();
|
||||
|
||||
self::$logger = App::DI(Logger::class);
|
||||
self::$environmentService = App::DI(EnvironmentService::class);
|
||||
|
||||
$capabilities = [WebDriverCapabilityType::BROWSER_NAME => 'chrome'];
|
||||
self::$webDriver = RemoteWebDriver::create(
|
||||
'http://'.$_SERVER['SELENIUM_HOST'].':'.$_SERVER['SELENIUM_PORT'].'/wd/hub',
|
||||
sprintf(
|
||||
'http://%s:%d/wd/hub',
|
||||
self::$environmentService->get('SELENIUM_HOST', 'selenium'),
|
||||
self::$environmentService->get('SELENIUM_PORT', 4444)
|
||||
),
|
||||
$capabilities,
|
||||
60000,
|
||||
60000
|
||||
|
|
@ -30,9 +41,6 @@ abstract class AbstractSeleniumTestCase extends AbstractBaseTestCase
|
|||
self::$webDriver->manage()->timeouts()->implicitlyWait(3);
|
||||
|
||||
self::$screenshotsDir = APP_ROOT.'/build/Screenshots/'.date('Y-m-d H-i-s').'/';
|
||||
if (!(new Filesystem())->exists(self::$screenshotsDir)) {
|
||||
(new Filesystem())->mkdir(self::$screenshotsDir, 0777);
|
||||
}
|
||||
}
|
||||
|
||||
public static function tearDownAfterClass(): void
|
||||
|
|
@ -41,8 +49,27 @@ abstract class AbstractSeleniumTestCase extends AbstractBaseTestCase
|
|||
parent::tearDownAfterClass();
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
if (!(new Filesystem())->exists(self::$screenshotsDir)) {
|
||||
(new Filesystem())->mkdir(self::$screenshotsDir, 0777);
|
||||
}
|
||||
self::$webDriver->takeScreenshot(self::$screenshotsDir.self::$screenshotIndex."_{$name}.jpg");
|
||||
++self::$screenshotIndex;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue