createApp(); $this->prepareForE2E(); $this->driver = RemoteWebDriver::create('http://localhost:4444/wd/hub', DesiredCapabilities::chrome()); } /** * @return Application */ protected function createApp() { $this->app = require __DIR__.'/../../bootstrap/app.php'; $this->app->make(Kernel::class)->bootstrap(); return $this->app; } private function prepareForE2E() { // Make sure we have a fresh database. @unlink(__DIR__.'/../../database/e2e.sqlite'); touch(__DIR__.'/../../database/e2e.sqlite'); Artisan::call('migrate'); Artisan::call('db:seed'); Artisan::call('db:seed', ['--class' => 'E2EDataSeeder']); if (!file_exists($this->coverPath)) { @mkdir($this->coverPath, 0777, true); } } /** * Log into Koel. * * @param string $username * @param string $password */ protected function login($username = 'koel@example.com', $password = 'SoSecureK0el') { $this->typeIn("#app > div.login-wrapper > form > [type='email']", $username); $this->typeIn("#app > div.login-wrapper > form > [type='password']", $password); $this->enter(); } protected function loginAndWait() { $this->login(); $this->waitUntil(WebDriverExpectedCondition::textToBePresentInElement( WebDriverBy::cssSelector('#userBadge > a.view-profile.control > span'), 'Koel Admin' )); return $this; } /** * A helper to allow going to a specific screen. * * @param $screen * * @return $this * * @throws \Exception */ protected function goto($screen) { $this->wrapperId = "#{$screen}Wrapper"; if ($screen === 'favorites') { $this->click('#sidebar .favorites a'); } else { $this->click("#sidebar a.$screen"); } $this->waitUntil(WebDriverExpectedCondition::visibilityOfElementLocated( WebDriverBy::cssSelector($this->wrapperId) )); return $this; } protected function waitForUserInput() { if (trim(fgets(fopen('php://stdin', 'rb'))) !== chr(13)) { return; } } protected function focusIntoApp() { $this->click('#app'); } public function setUp() { $this->driver->get($this->url); } public function tearDown() { $this->driver->quit(); } }