【发布时间】:2018-02-22 13:34:50
【问题描述】:
我想创建一个行为定义来使用 cookie 对用户进行身份验证。
当the behat scenario 上没有@javascript 标记时,它适用于Behat BrowserKitDriver。
但它不适用于 Behat Selenium2Driver,当有 @javascript 标签 like here。
我用the symfony-demo application for demonstrate my tests。
我的定义有什么问题?
/**
* @Given I am logged in as :username
*/
public function iAmLoggedInAs($username)
{
$driver = $this->getSession()->getDriver();
$session = $this->kernel->getContainer()->get('session');
$user = $this->kernel->getContainer()->get('security.user.provider.concrete.database_users')->loadUserByUsername($username);
$providerKey = 'secured_area';
$token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles());
$session->set('_security_'.$providerKey, serialize($token));
$session->save();
if ($driver instanceof BrowserKitDriver) {
$client = $driver->getClient();
$cookie = new Cookie($session->getName(), $session->getId());
$client->getCookieJar()->set($cookie);
} else if ($driver instanceof Selenium2Driver) {
$this->visitPath('/');
} else {
throw new \Exception('Unsupported Driver');
}
$this->getSession()->setCookie($session->getName(), $session->getId());
}
我只希望my last behat test 有效。
我不知道我是否清楚...问如果没有。
如果你能做一个带有修复的拉取请求,那将是完美的。
【问题讨论】:
-
@javascript 启用 javascript 并且 BrowserKitDriver 无法评估 javascript。您收到任何错误吗?
-
当我设置
@javascript时,驱动不是BrowserKitDriver而是Selenium2Driver。没有错误,javascript 已正确执行,但我没有登录到应用程序。 -
在尝试设置 cookie 之前和之后,您是否尝试过对 cookie 进行回显。此外,在尝试设置 cookie 之前,请确保页面已加载。您是否尝试过@insulated 和@javascript?您的 cookie 是 HttpOnly cookie 吗?如果 cookie 有 HttpOnly 标志,您可能会被禁止通过 JavaScript 设置 cookie 以防止 XSS 攻击。
-
您是否尝试在访问页面之前设置 cookie?
-
@lauda 我尝试在 FeatureContext.php 中显示 cookie:
var_dump($driver->getWebDriverSession()->getAllCookies());,但也在 twig:the result 中。奇怪的是有 2 个 cookie:PHPSESSID 和 MOCKSESSID。 cookie 不是 httpOnly(见结果页面)。
标签: selenium symfony behat mink