gpt4 book ai didi

selenium - 使用 Behat 在 Selenium 中使用 HTTP cookie 进行身份验证

转载 作者:行者123 更新时间:2023-12-04 15:54:57 31 4
gpt4 key购买 nike

我想创建一个 behat 定义来使用 cookie 对用户进行身份验证。

它适用于 Behat BrowserKitDriver,当没有 @javascript 时标签在 the behat scenario .
但是当存在 @javascript 时,它不适用于 Behat Selenium2Driver标签 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作品。
我不知道我是否清楚......如果没有就问。

如果您可以通过修复来执行拉取请求,那将是完美的。

最佳答案

你有几种方法

选项 1. 只使用 Mink

  • 如果您使用 貂皮 ,您的上下文将扩展 RawWebContextWebContext因此您可以通过 getSession() 访问 Mink session .
  • 然后,使用 setCookie .

  • 如您所见,我们很幸运,这就是与 Mink 合作的重点, Cookie Manipulationsupported by many drivers
    // ...
    $this->visitPath('/');
    $this->getSession()->setCookie(
    $session->getName(),
    $session->getId()
    );

    注 1:请注意,以下内容不是一回事:
  • $session (引用你的问题)是 Symfony\Component\HttpFoundation\Session\Session 的一个实例
  • $this->getSession()返回 Behat\Mink\Session 的实例

  • 注 2:想查看您的 cookie 吗?
    var_dump($driver->getClient()->getCookieJar());

    选项 2. 访问 Selenium2 session

    不要犹豫,深入代码以了解 Selenium2 WebDriver Session作品。

    你一定会找到 absolute joy and peace of mind .
    else if ($driver instanceof Selenium2Driver) {
    $this->visitPath('/');
    $cookie = array(
    "domain" => "", <----- You can even add your domain here
    "name" => $session->getName(),
    "value" => $session->getId(),
    "path" => "/",
    "secure" => False
    );
    $driver->getWebDriverSession()->setCookie($cookie);
    }

    注 3:想查看您的 cookie 吗?
    var_dump($driver->getWebDriverSession()->getAllCookies());

    关于selenium - 使用 Behat 在 Selenium 中使用 HTTP cookie 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37736459/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com