2016-09-15 5 views
1

Behat으로 로그인 확인 단계를 수행하려고합니다. 테스트를 시작하기 전에 데이터베이스를 청소하고 Fixture loader를 실행하여 사용자가 데이터베이스에 있는지 확인했습니다 (이 확인란을 선택 했음). 입력이 채워진 후 (올바른 데이터로) 잘못된 자격 증명으로 제출이 실패합니다. 열린 브라우저의 동일한 열린 세션에서 수동으로 데이터를 다시 입력하면 (사용자 이름과 비밀번호) 작동합니다. 로그인 문맥에게 솔루션Behat 로그인 양식은 항상 잘못된 자격 증명을 트리거합니다.

기능

Feature: Login to application 
    In order to access admin area 
    I need to login as an administrator 

    @javascript 
    Scenario Outline: Login as <administrator> 
    When I am logged in as an administrator with <administrator> credentials 
    Then I wait for "10" seconds 
... 

    Examples: 
     | administrator | 
     | admin   | 

에 대한

use SensioLabs\Behat\PageObjectExtension\Context\PageObjectContext; 
use Behat\Behat\Context\Context; 

require_once __DIR__.'/Resources/Users/ymlParser/UserCredentialsParser.php'; 

/** 
* Class LoginContext 
*/ 
class LoginContext extends PageObjectContext implements Context 
{ 

    /** 
    * @param $administrator 
    * 
    * @When /^I am logged in as an administrator with ([^"]*) credentials$/ 
    */ 
    public function iAmLoggedInAsAnAdministrator($administrator) 
    { 
     $this->getPage('Login Page')->open(); 
     $this->getPage('Login Page')->enterLoginDetails(UserCredentialsParser::load($administrator)); 
     $this->getPage('Login Page')->submitLoginForm(); 

     //$this->getPage('Login Page')->showLoginSuccessful(); 
     //$this->getPage('Login Page')->isLoggedInUserAdmin(true); 
    } 
} 

UserCr를 하단에 업데이트를 참조하십시오 edentialParser

require_once __DIR__.'/../../../../../../vendor/autoload.php'; 

use Symfony\Component\Yaml\Yaml; 
use Symfony\Component\Yaml\Parser; 
use Symfony\Component\Yaml\Exception\ParseException; 

/** 
* Class UserCredentialsParser 
*/ 
class UserCredentialsParser 
{  
    /** 
    * @param $fileName 
    * 
    * @return null|stdClass 
    */ 
    public static function load($fileName) 
    { 
     $oUser = null; 
     $filePath = __DIR__.'/../usersCredentials/'.$fileName.'.yml'; 

     if (file_exists($filePath)) { 
      try { 
       $userData = Yaml::parse(file_get_contents($filePath)); 

       $oUser   = new stdClass(); 
       $oUser->username = $userData['username']; 
       $oUser->password = $userData['password']; 
      } catch (ParseException $e) { 
       printf("Unable to parse YAML string %s", $e->getMessage()); 
      } 
     } 

     return $oUser; 
    } 
} 

로그인 페이지

namespace Page; 

use SensioLabs\Behat\PageObjectExtension\PageObject\Page; 

/** 
* Class LoginPage 
* @package Page 
*/ 
class LoginPage extends Page 
{ 
    protected $path = '/login'; 

    /** 
    * @param $oUser 
    * 
    * @return mixed 
    */ 
    public function enterLoginDetails($oUser) 
    { 
     return $this->getElement('Login Form')->enterLoginDetails($oUser); 
    } 

    /** 
    * Submit registration form 
    * 
    * @return mixed 
    */ 
    public function submitLoginForm() 
    { 
     return $this->getElement('Login Form')->submitLoginForm(); 
    }  
} 

로그인 양식

namespace Page\Element; 

use SensioLabs\Behat\PageObjectExtension\PageObject\Element; 

/** 
* Class LoginForm 
* @package Page\Element 
*/ 
class LoginForm extends Element 
{ 
    /** 
    * @var string 
    */ 
    protected $selector = 'form'; 

    /** 
    * Fill up the login form 
    * 
    * @param $oUser 
    */ 
    public function enterLoginDetails($oUser) 
    { 
     $this->fillField('_username', $oUser->username); 
     $this->fillField('_password', $oUser->password); 
    } 

    /** 
    * Submit registration form button 
    */ 
    public function submitLoginForm() 
    { 
     $this->pressButton('_submit'); 
    } 
} 

업데이트 : 문제는 모든 종류의 자유 텍스트에는 입력란의 텍스트 뒤에 삽입 된 탭이 있다는 것입니다 (아마도 드라이버에 의해 - 내 경우 크롬). 내가 파이어 폭스로 바꿨을 때 문제없이 작동했고 여분의 공백이 추가되지 않았다.

+0

enterLoginDetails의 var_dump/echo는 올바른 자격 증명을 표시합니까? 자격 증명을 입력하고 오른쪽 제출 버튼을 누르면 데이터베이스와 관련된 지연이있을 수 있습니다. 로그인 단계가 10 초 동안 기다렸다가 동일한 지 확인하십시오. 또한 데이터베이스에 올바른 자격 증명을 설정했는지 확인하고, 무엇이든 놓치지 않았는지 다시 한 번 확인하십시오. – lauda

+0

아니요 ... 방금 패스워드 뒤에 여분의 공간 (또는 탭)을 추가하는 것으로 나타났습니다 ... 이제 어떻게 그걸 꺼내야할지 잘 모르겠습니다 ... 트림은 효과가없는 것 같습니다 ... –

+0

따라와 어디서 왜 this.Also admin.As 일시적 대안으로 당신은 str_replace ('', '', $ 문자열) 시도해 볼 수 yml 확인; – lauda

답변

1

모든 종류의 자유 텍스트에는 입력 상자에 텍스트 뒤에 삽입 된 탭이있었습니다 (아마도 드라이버 - 내 경우에는 크롬으로). 내가 파이어 폭스로 바꿨을 때 문제없이 작동했고 여분의 공백이 추가되지 않았다.

UPDATE는 : 2016년 11월 2일에 관해서는 나는 최신 크롬 드라이버로 업데이트가 예상대로 작동 보인다.

1

크롬 드라이버를 현재 2.24의 최신 버전으로 업데이트하여 문제를 해결했습니다.