我正在尝试使用Behat进行登录验证步骤。 我正在清理数据库并在测试开始之前执行Fixture加载程序,以便用户在数据库中(我检查了这个并且它是正确的)。 由于某些原因,在输入填充后(使用正确的数据)提交失败并且凭据无效。如果我在打开的浏览器的同一个打开会话上再次手动输入数据(用户名和密码),则可以正常工作。 查看底部的更新以获取解决方案
特征
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;
}
}
登录页面
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');
}
}
更新 问题是,对于任何类型的自由文本,在输入框中的文本之后插入了一个选项卡(可能是由驱动程序 - 在我的情况下为chrome)。当我切换到Firefox时,它没有任何问题,并且没有添加额外的空格。
答案 0 :(得分:1)
问题在于,对于任何类型的自由文本,在输入框中的文本之后插入了一个选项卡(可能是由驱动程序 - 在我的情况下为chrome)。当我切换到Firefox时,它没有任何问题,并且没有添加额外的空格。
更新:至于 2016年11月2日我更新了最新的CHROME驱动程序,它似乎按预期工作。
答案 1 :(得分:1)
我已经将Chrome驱动程序更新到目前2.24的最新版本,它解决了我的问题。