处理$ _SESSION和Behat + mink + selenium

时间:2015-05-08 14:19:02

标签: php selenium behat mink

为了使用我试图测试的系统,您需要成为经过身份验证的用户。登录后,会创建一个$ _SESSION变量,其中包含用户ID和user_name,并且您已登录。此会话始终处于检查状态,如果此会话变量不存在,则会重定向用户到登录页面。我可以使用behat登录,但一旦进入系统,我就会重定向回登录页面。如果我评论负责$ _SESSION验证的行,它会按预期工作。你们有没有办法登录并保持会议?我使用laravel或symfony阅读了很多解决方案,但我没有使用任何框架。

以下是功能代码:

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"

这是mink上下文代码的一部分:

/**
 * @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();
}

1 个答案:

答案 0 :(得分:0)

在每个方案之后,将重置PHP超全局变量$ _SESSION。您可以在每个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();
}