Php 处理$会话和行为+;水貂&x2B;硒
为了使用我尝试测试的系统,您需要是经过身份验证的用户。登录后,将在您登录时创建一个$\会话变量,其中包含用户id和用户名。始终检查此会话,如果此会话变量不存在,则会将用户重定向到登录页面。我可以使用behat登录,但一旦它进入系统,我就会重定向回登录页面。如果我对负责$\u会话验证的行进行注释,它将按预期工作。你们知道如何登录并保持会话吗?我读过很多使用laravel或symfony的解决方案,但我没有使用任何框架 以下是功能部件代码:Php 处理$会话和行为+;水貂&x2B;硒,php,selenium,behat,mink,Php,Selenium,Behat,Mink,为了使用我尝试测试的系统,您需要是经过身份验证的用户。登录后,将在您登录时创建一个$\会话变量,其中包含用户id和用户名。始终检查此会话,如果此会话变量不存在,则会将用户重定向到登录页面。我可以使用behat登录,但一旦它进入系统,我就会重定向回登录页面。如果我对负责$\u会话验证的行进行注释,它将按预期工作。你们知道如何登录并保持会话吗?我读过很多使用laravel或symfony的解决方案,但我没有使用任何框架 以下是功能部件代码: Feature: In order to use
Feature:
In order to use the system, the user needs a valid login first
Scenario: Loading the log in page
Given I am on "/login.php"
Then I should see "Login"
@javascript
Scenario: Logging in with the right credentials
Given I am signed in
And I am on "/students"
And I wait 10 seconds
Then I should see "logout"
以下是水貂上下文代码的一部分:
/**
* @Given /^(?:|I )am signed in$/
*/
public function signIn()
{
session_start();
$_SESSION['admin']["user_name"] = 'admin';
$_SESSION['admin']["id"] = '1';
$this->getSession()->getDriver()->setCookie(session_name(), session_id());
session_commit();
}
PHP超级全局变量$\u会话将在每个场景之后重置。您可以在每个Sceanrio中调用一个登录名,以最小化问题
/* @Given I am logged in as :username with password :password
*
* @param $username
* @param $password
*/
public function iAmLoggedInAs($username, $password)
{
$session = $this->getSession();
$session->visit("[URL]");
$page = $session->getPage();
$page->find("named", array("id_or_name", "[id]"))->setValue($username);
$page->find("named", array("id_or_name", "[id]"))->setValue($password);
$page->find("named", array("id_or_name", "[submit button]"))->click();
}
那么,你的意思是在运行另一个测试套件后会话结束了吗?不是。我的意思是:如果我有一个场景,其中我登录并被重定向到下一个页面,检查我是否有管理会话,我会被踢出。好像这个管理会话从未设置过。这很奇怪。你在测试鞋吗?我继续寻找解决方案。没有成功。你找到解决办法了吗?