Behat 登录表单总是触发无效凭据

Behat login form always triggers invalid credentials

我正在尝试使用 Behat 进行登录验证步骤。 我正在清理数据库并在测试开始之前执行 Fixture 加载程序,以便用户在数据库中(我检查过这个并且它是正确的)。 出于某种原因,在输入(使用正确的数据)填充后,提交失败,凭据无效。如果我在打开的浏览器的同一个打开会话中再次手动输入数据(用户名和密码),它就可以工作。 查看底部的更新以获取解决方案

feature

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         |

LoginContext

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);
    }
}

UserCredentialParser

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;
    }
}

Login Page

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

Login Form

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');
    }
}

更新: 问题是对于任何类型的自由文本,在输入框中的文本之后都会插入一个选项卡(可能是由驱动程序插入的 - 在我的例子中 chrome)。当我切换到 Firefox 时,它没有任何问题,也没有添加额外的空格。

问题在于,对于任何类型的自由文本,在输入框的文本之后都会插入一个制表符(可能是由驱动程序插入的 - 在我的例子中 chrome)。当我切换到 Firefox 时,它没有任何问题,也没有添加额外的空格。

更新:至于 2016 年 11 月 2 日 我更新到最新的 CHROME 驱动程序,它似乎按预期工作.

我已经将 chrome-驱动程序更新到目前的最新版本 2.24,它解决了我的问题。