From eda98ab09d3b58b4d483d1b340ffca97da4789c3 Mon Sep 17 00:00:00 2001 From: dmitry kuzmin Date: Tue, 10 Apr 2018 22:42:03 +0200 Subject: [PATCH 01/10] Selenium manager --- src/ProcessManager/SeleniumManager.php | 46 ++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/ProcessManager/SeleniumManager.php diff --git a/src/ProcessManager/SeleniumManager.php b/src/ProcessManager/SeleniumManager.php new file mode 100644 index 00000000..a12c0ac2 --- /dev/null +++ b/src/ProcessManager/SeleniumManager.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Panthere\ProcessManager; + +use Facebook\WebDriver\Remote\RemoteWebDriver; +use Facebook\WebDriver\WebDriver; +use \Facebook\WebDriver\WebDriverCapabilities; + + +final class SeleniumManager implements BrowserManagerInterface +{ + private $host; + private $capabilities; + + public function __construct($host, WebDriverCapabilities $capabilities) + { + $this->host = $host; + $this->capabilities = $capabilities; + + } + + public function start(): WebDriver + { + return RemoteWebDriver::create( + $this->host, + $this->capabilities + ); + } + + + public function quit(): void + { + // nothing + } +} From 7fc872736a038878190e09fdf243d568f31ed57d Mon Sep 17 00:00:00 2001 From: dmitry kuzmin Date: Tue, 10 Apr 2018 22:50:24 +0200 Subject: [PATCH 02/10] Selenium manager create method --- src/Client.php | 7 +++++++ src/ProcessManager/SeleniumManager.php | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Client.php b/src/Client.php index 852fa31a..10b44ae8 100644 --- a/src/Client.php +++ b/src/Client.php @@ -15,6 +15,7 @@ use Facebook\WebDriver\WebDriver; use Facebook\WebDriver\WebDriverBy; +use Facebook\WebDriver\WebDriverCapabilities; use Facebook\WebDriver\WebDriverExpectedCondition; use Panthere\Cookie\CookieJar; use Panthere\DomCrawler\Crawler; @@ -22,6 +23,7 @@ use Panthere\DomCrawler\Link as PanthereLink; use Panthere\ProcessManager\BrowserManagerInterface; use Panthere\ProcessManager\ChromeManager; +use Panthere\ProcessManager\SeleniumManager; use Symfony\Component\BrowserKit\Client as BaseClient; use Symfony\Component\BrowserKit\Request; use Symfony\Component\BrowserKit\Response; @@ -49,6 +51,11 @@ public static function createChromeClient(?string $chromeDriverBinary = null, ?a return new self(new ChromeManager($chromeDriverBinary, $arguments)); } + public static function createSeleniumClient(?string $host = null, ?WebDriverCapabilities $capabilities = null): self + { + return new self(new SeleniumManager($host, $capabilities)); + } + public function __construct(BrowserManagerInterface $browserManager) { $this->browserManager = $browserManager; diff --git a/src/ProcessManager/SeleniumManager.php b/src/ProcessManager/SeleniumManager.php index a12c0ac2..23f09129 100644 --- a/src/ProcessManager/SeleniumManager.php +++ b/src/ProcessManager/SeleniumManager.php @@ -13,6 +13,7 @@ namespace Panthere\ProcessManager; +use Facebook\WebDriver\Remote\DesiredCapabilities; use Facebook\WebDriver\Remote\RemoteWebDriver; use Facebook\WebDriver\WebDriver; use \Facebook\WebDriver\WebDriverCapabilities; @@ -20,11 +21,16 @@ final class SeleniumManager implements BrowserManagerInterface { + + const DEFAULT_HOST = 'http://127.0.0.1:4444/wd/hub'; + private $host; private $capabilities; - public function __construct($host, WebDriverCapabilities $capabilities) + public function __construct(?string $host = null, ?WebDriverCapabilities $capabilities = null) { + $host = $host ?? self::DEFAULT_HOST; + $capabilities = $capabilities ?? DesiredCapabilities::chrome(); $this->host = $host; $this->capabilities = $capabilities; From 0e916c7843d1d23ab5559f14d1ad772846159b78 Mon Sep 17 00:00:00 2001 From: dkuzmin Date: Fri, 20 Apr 2018 13:39:06 +0200 Subject: [PATCH 03/10] fix cs --- src/ProcessManager/SeleniumManager.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ProcessManager/SeleniumManager.php b/src/ProcessManager/SeleniumManager.php index 23f09129..f375f5ec 100644 --- a/src/ProcessManager/SeleniumManager.php +++ b/src/ProcessManager/SeleniumManager.php @@ -16,8 +16,7 @@ use Facebook\WebDriver\Remote\DesiredCapabilities; use Facebook\WebDriver\Remote\RemoteWebDriver; use Facebook\WebDriver\WebDriver; -use \Facebook\WebDriver\WebDriverCapabilities; - +use Facebook\WebDriver\WebDriverCapabilities; final class SeleniumManager implements BrowserManagerInterface { @@ -33,7 +32,6 @@ public function __construct(?string $host = null, ?WebDriverCapabilities $capabi $capabilities = $capabilities ?? DesiredCapabilities::chrome(); $this->host = $host; $this->capabilities = $capabilities; - } public function start(): WebDriver From f413c77292ead264e7b4ac47e5e58e7177d89282 Mon Sep 17 00:00:00 2001 From: dkuzmin Date: Fri, 20 Apr 2018 14:43:30 +0200 Subject: [PATCH 04/10] simple test --- tests/ProcessManager/SeleniumManagerTest.php | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 tests/ProcessManager/SeleniumManagerTest.php diff --git a/tests/ProcessManager/SeleniumManagerTest.php b/tests/ProcessManager/SeleniumManagerTest.php new file mode 100644 index 00000000..3b35c05f --- /dev/null +++ b/tests/ProcessManager/SeleniumManagerTest.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Panthere\Tests\ProcessManager; + +use Panthere\ProcessManager\SeleniumManager; +use PHPUnit\Framework\TestCase; + +/** + * @author Kévin Dunglas + */ +class SeleniumManagerTest extends TestCase +{ + public function testRun() + { + $manager = new SeleniumManager(); + $client = $manager->start(); + $this->assertNotEmpty($client->getCurrentURL()); + $manager->quit(); + } + +} From 8895b43d091491925c7087476e7a47220db5d420 Mon Sep 17 00:00:00 2001 From: dkuzmin Date: Sat, 21 Apr 2018 11:56:40 +0200 Subject: [PATCH 05/10] fix selenium manager test --- src/ProcessManager/SeleniumManager.php | 2 +- tests/ProcessManager/SeleniumManagerTest.php | 23 +++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/ProcessManager/SeleniumManager.php b/src/ProcessManager/SeleniumManager.php index f375f5ec..66363593 100644 --- a/src/ProcessManager/SeleniumManager.php +++ b/src/ProcessManager/SeleniumManager.php @@ -21,7 +21,7 @@ final class SeleniumManager implements BrowserManagerInterface { - const DEFAULT_HOST = 'http://127.0.0.1:4444/wd/hub'; + private const DEFAULT_HOST = 'http://127.0.0.1:4444/wd/hub'; private $host; private $capabilities; diff --git a/tests/ProcessManager/SeleniumManagerTest.php b/tests/ProcessManager/SeleniumManagerTest.php index 3b35c05f..e848b69d 100644 --- a/tests/ProcessManager/SeleniumManagerTest.php +++ b/tests/ProcessManager/SeleniumManagerTest.php @@ -13,6 +13,7 @@ namespace Panthere\Tests\ProcessManager; +use Panthere\ProcessManager\ChromeManager; use Panthere\ProcessManager\SeleniumManager; use PHPUnit\Framework\TestCase; @@ -21,9 +22,29 @@ */ class SeleniumManagerTest extends TestCase { + + /** + * we can mock selenium with built-in ChromeManager + * @var ChromeManager + */ + protected $chromeMockManager; + + + public function setUp() : void + { + $this->chromeMockManager = new ChromeManager(); + $this->chromeMockManager->start(); + } + + + public function tearDown() : void + { + $this->chromeMockManager->quit(); + } + public function testRun() { - $manager = new SeleniumManager(); + $manager = new SeleniumManager('http://localhost:9515'); $client = $manager->start(); $this->assertNotEmpty($client->getCurrentURL()); $manager->quit(); From 64eea273abcb4c2490d20befae8bb237d3b53e9f Mon Sep 17 00:00:00 2001 From: dkuzmin Date: Tue, 12 Jun 2018 17:00:04 +0200 Subject: [PATCH 06/10] fix travis ci test, fix cs --- src/ProcessManager/ChromeManager.php | 2 +- src/ProcessManager/SeleniumManager.php | 7 +++---- tests/ProcessManager/SeleniumManagerTest.php | 20 ++++++++++---------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/ProcessManager/ChromeManager.php b/src/ProcessManager/ChromeManager.php index f59b597f..5a49f475 100644 --- a/src/ProcessManager/ChromeManager.php +++ b/src/ProcessManager/ChromeManager.php @@ -77,7 +77,7 @@ private function findChromeDriverBinary(): string } } - private function getDefaultArguments(): array + public function getDefaultArguments(): array { // Enable the headless mode $args = ['--headless', 'window-size=1200,1100', '--disable-gpu']; diff --git a/src/ProcessManager/SeleniumManager.php b/src/ProcessManager/SeleniumManager.php index 66363593..468cc05a 100644 --- a/src/ProcessManager/SeleniumManager.php +++ b/src/ProcessManager/SeleniumManager.php @@ -4,6 +4,7 @@ * This file is part of the Panthère project. * * (c) Kévin Dunglas + * (c) Dmitry Kuzmin * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -28,10 +29,8 @@ final class SeleniumManager implements BrowserManagerInterface public function __construct(?string $host = null, ?WebDriverCapabilities $capabilities = null) { - $host = $host ?? self::DEFAULT_HOST; - $capabilities = $capabilities ?? DesiredCapabilities::chrome(); - $this->host = $host; - $this->capabilities = $capabilities; + $this->host = $host ?? self::DEFAULT_HOST; + $this->capabilities = $capabilities ?? DesiredCapabilities::chrome(); } public function start(): WebDriver diff --git a/tests/ProcessManager/SeleniumManagerTest.php b/tests/ProcessManager/SeleniumManagerTest.php index e848b69d..8c0e1a37 100644 --- a/tests/ProcessManager/SeleniumManagerTest.php +++ b/tests/ProcessManager/SeleniumManagerTest.php @@ -13,6 +13,7 @@ namespace Panthere\Tests\ProcessManager; +use Facebook\WebDriver\Chrome\ChromeOptions; use Panthere\ProcessManager\ChromeManager; use Panthere\ProcessManager\SeleniumManager; use PHPUnit\Framework\TestCase; @@ -22,32 +23,31 @@ */ class SeleniumManagerTest extends TestCase { - /** - * we can mock selenium with built-in ChromeManager - * @var ChromeManager - */ + * we can mock selenium with built-in ChromeManager. + * + * @var ChromeManager + */ protected $chromeMockManager; - - public function setUp() : void + public function setUp(): void { $this->chromeMockManager = new ChromeManager(); $this->chromeMockManager->start(); } - - public function tearDown() : void + public function tearDown(): void { $this->chromeMockManager->quit(); } public function testRun() { - $manager = new SeleniumManager('http://localhost:9515'); + $co = new ChromeOptions(); + $co->addArguments($this->chromeMockManager->getDefaultArguments()); + $manager = new SeleniumManager('http://localhost:9515', $co->toCapabilities()); $client = $manager->start(); $this->assertNotEmpty($client->getCurrentURL()); $manager->quit(); } - } From ab5fbfc05e8efa43612666b0ebb8ae197e13492a Mon Sep 17 00:00:00 2001 From: dkuzmin Date: Tue, 12 Jun 2018 17:18:23 +0200 Subject: [PATCH 07/10] fix cs --- src/ProcessManager/SeleniumManager.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/ProcessManager/SeleniumManager.php b/src/ProcessManager/SeleniumManager.php index 468cc05a..332cf9c5 100644 --- a/src/ProcessManager/SeleniumManager.php +++ b/src/ProcessManager/SeleniumManager.php @@ -4,7 +4,6 @@ * This file is part of the Panthère project. * * (c) Kévin Dunglas - * (c) Dmitry Kuzmin * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -21,7 +20,6 @@ final class SeleniumManager implements BrowserManagerInterface { - private const DEFAULT_HOST = 'http://127.0.0.1:4444/wd/hub'; private $host; @@ -41,7 +39,6 @@ public function start(): WebDriver ); } - public function quit(): void { // nothing From 1af41b81f2c4712f2578ad035b4717ee3ca0d385 Mon Sep 17 00:00:00 2001 From: dkuzmin Date: Tue, 12 Jun 2018 18:02:31 +0200 Subject: [PATCH 08/10] fix cs, refactor constructor --- src/ProcessManager/SeleniumManager.php | 12 +++++++----- tests/ProcessManager/SeleniumManagerTest.php | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/ProcessManager/SeleniumManager.php b/src/ProcessManager/SeleniumManager.php index 332cf9c5..e638df59 100644 --- a/src/ProcessManager/SeleniumManager.php +++ b/src/ProcessManager/SeleniumManager.php @@ -18,16 +18,18 @@ use Facebook\WebDriver\WebDriver; use Facebook\WebDriver\WebDriverCapabilities; +/** + * @author Dmitry Kuzmin + */ final class SeleniumManager implements BrowserManagerInterface { - private const DEFAULT_HOST = 'http://127.0.0.1:4444/wd/hub'; - private $host; private $capabilities; - public function __construct(?string $host = null, ?WebDriverCapabilities $capabilities = null) - { - $this->host = $host ?? self::DEFAULT_HOST; + public function __construct( + ?string $host = 'http://127.0.0.1:4444/wd/hub', + ?WebDriverCapabilities $capabilities = null + ) { $this->capabilities = $capabilities ?? DesiredCapabilities::chrome(); } diff --git a/tests/ProcessManager/SeleniumManagerTest.php b/tests/ProcessManager/SeleniumManagerTest.php index 8c0e1a37..375c0ef0 100644 --- a/tests/ProcessManager/SeleniumManagerTest.php +++ b/tests/ProcessManager/SeleniumManagerTest.php @@ -19,7 +19,7 @@ use PHPUnit\Framework\TestCase; /** - * @author Kévin Dunglas + * @author Dmitry Kuzmin */ class SeleniumManagerTest extends TestCase { From 7a7af678876f08f0a893eeb7eb5471ea662f1fc9 Mon Sep 17 00:00:00 2001 From: dkuzmin Date: Tue, 12 Jun 2018 18:12:33 +0200 Subject: [PATCH 09/10] fix constructor --- src/ProcessManager/SeleniumManager.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ProcessManager/SeleniumManager.php b/src/ProcessManager/SeleniumManager.php index e638df59..9f80beee 100644 --- a/src/ProcessManager/SeleniumManager.php +++ b/src/ProcessManager/SeleniumManager.php @@ -30,6 +30,7 @@ public function __construct( ?string $host = 'http://127.0.0.1:4444/wd/hub', ?WebDriverCapabilities $capabilities = null ) { + $this->host = $host; $this->capabilities = $capabilities ?? DesiredCapabilities::chrome(); } From 6d8bd08447ca443594c591298e040bf989cdef9b Mon Sep 17 00:00:00 2001 From: dkuzmin Date: Tue, 12 Jun 2018 18:13:06 +0200 Subject: [PATCH 10/10] fix test --- src/ProcessManager/ChromeManager.php | 2 +- tests/ProcessManager/SeleniumManagerTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ProcessManager/ChromeManager.php b/src/ProcessManager/ChromeManager.php index 5a49f475..f59b597f 100644 --- a/src/ProcessManager/ChromeManager.php +++ b/src/ProcessManager/ChromeManager.php @@ -77,7 +77,7 @@ private function findChromeDriverBinary(): string } } - public function getDefaultArguments(): array + private function getDefaultArguments(): array { // Enable the headless mode $args = ['--headless', 'window-size=1200,1100', '--disable-gpu']; diff --git a/tests/ProcessManager/SeleniumManagerTest.php b/tests/ProcessManager/SeleniumManagerTest.php index 375c0ef0..0bd68f95 100644 --- a/tests/ProcessManager/SeleniumManagerTest.php +++ b/tests/ProcessManager/SeleniumManagerTest.php @@ -44,7 +44,7 @@ public function tearDown(): void public function testRun() { $co = new ChromeOptions(); - $co->addArguments($this->chromeMockManager->getDefaultArguments()); + $co->addArguments(['--headless', 'window-size=1200,1100', '--disable-gpu', '--no-sandbox']); $manager = new SeleniumManager('http://localhost:9515', $co->toCapabilities()); $client = $manager->start(); $this->assertNotEmpty($client->getCurrentURL());