Gerenciando Sessões

Apesar do objeto de sessão já estar utilizável o suficiente, não é tão fácil escrever um código multissessão (multidriver/multinavegador). Sim, você ouviu direito, com o Mink você pode manipular múltiplos emuladores de navegador simultaneamente com uma única API consistente:

// inicialização de sessões
$sessao1 = new \Behat\Mink\Session($driver1);
$sessao2 = new \Behat\Mink\Session($driver2);

// começa sessões
$sessao1->start();
$sessao2->start();

$sessao1->visit('http://my_project.dev/chat.php');
$sessao2->visit('http://my_project.dev/chat.php');

Cuidado

O estado de uma sessão é gerenciado atualmente pelo driver. Isto significa que cada sessão precisa usar uma instância diferente de driver.

Não é legal? Mas o Mink torna isto mais frio:

$mink = new \Behat\Mink\Mink();
$mink->registerSession('goutte', $goutteSession);
$mink->registerSession('sahi', $sahiSession);
$mink->setDefaultSessionName('goutte');

Com tal configuração, você pode falar com suas sessões pelo nome através de um único objeto contêiner:

$mink->getSession('goutte')->visit('http://my_project.dev/chat.php');
$mink->getSession('sahi')->visit('http://my_project.dev/chat.php');

Nota

O Mink sempre irá iniciar suas sessões ociosas quando necessário (na primeira chamada getSession()). Então, o navegador não será inicial até que você realmente precise dele!

Ou você até pode omitir o nome da sessão em casos padrão:

$mink->getSession()->visit('http://my_project.dev/chat.php');

Esta chamada é possível graças ao $mink->setDefaultSessionName('goutte') configurado previamente. Nós criamos a sessão padrão, que seria devolvida na chamada sem argumentos getSession().

Dica

A classe Behat\Mink\Mink também provê uma forma fácil de redefinir ou reiniciar suas sessões iniciadas (e somente iniciadas):

// redefine sessões iniciadas
$mink->resetSessions();

// reinicia sessões iniciadas
$mink->restartSessions();