[英]Laravel Dusk - Reuse browser with its session and cookies
我剛剛使用 Laravel Dusk 測試了一個 javascript 站點。
出於某種原因想要重用當前瀏覽器及其會話和 cookie(讓我保持在站點上的登錄狀態),所以我不需要通過身份驗證過程。
有什么辦法可以重用當前的瀏覽器?
我已經搜索過這個,但我沒有找到實用的信息/示例。 注意:我默認使用 Dusk 和 Google Chrome 和一個獨立的 ChromeDriver(不是 Selenium)
我使用 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));
}
當您使用 laravel dusk 時,我找到了一種將 cookie 設置為瀏覽器的方法:
使用planCookie函數時使用兩次訪問,如下代碼:
$this->browse(function (Browser $browser) {
$url = 'https://google.com';
$browser->visit($url);
$browser->plainCookie('key', 'value');
$browser->visit($url);
$browser->assertSee('Some Text');
});
希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.