Laravel Dusk - повторно использовать браузер с его сеансом и файлами cookie - PullRequest
0 голосов
/ 30 июня 2018

Я только что использовал Laravel Dusk для тестирования сайта javascript.

Хотите по какой-то причине повторно использовать текущий браузер с его сеансом и файлами cookie (держите меня в системе), поэтому мне не нужно проходить процесс аутентификации.

Есть ли способ повторно использовать текущий браузер?

Я уже искал об этом, но не нашел практической информации / примера. Примечание: я использую Dusk по умолчанию с Google Chrome и автономным ChromeDriver (не Selenium)

1 Ответ

0 голосов
/ 08 ноября 2018

У меня было такое же требование, используя Laravel Dusk. Хитрость заключается в том, чтобы использовать класс Facebook / WebDriver / Remote / RemoteWebDriver и его метод manage () .

Псевдокод:

use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Cookie;
use Facebook\WebDriver\WebDriverOptions;
use Laravel\Dusk\Browser;
use Laravel\Dusk\Chrome\ChromeProcess;

//the cookie file name
$cookie_file = 'cookies.txt';

//create the driver
$process = (new ChromeProcess)->toProcess();
$process->start();
$options = (new ChromeOptions)->addArguments(['--disable-gpu','--enable-file-cookies','--no-sandbox']);
$capabilities = DesiredCapabilities::chrome()->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = retry(5, function () use($capabilities) {
    return RemoteWebDriver::create('http://localhost:9515', $capabilities);
}, 50); 

//start the browser
$browser = new Browser($driver);
$browser->visit('https://tehwebsite.com/login');

//Cookie management - if there's a stored cookie file, load the contents         
if (file_exists($cookie_file)) {
    //Get cookies from storage
    $cookies = unserialize(file_get_contents($cookie_file));
    //Add each cookie to this session
    foreach ($cookies as $key => $cookie) {
        $driver->manage()->addCookie($cookie);
    }
}

//if no cookies in storage, do the browser tasks that will create them, eg by logging in 
$browser
    ->type('email', 'login@email.com')
    ->type('password', 'sdfsdfsdf')
    ->check('rememberMe')
    ->click('#login');

//now the cookies have been set, get and store them for future runs
if (!file_exists($cookie_file)) {
    $cookies = $driver->manage()->getCookies();
    file_put_contents($cookie_file, serialize($cookies));
}
...