У меня проблема с тестом входа в систему с использованием behat, mink и selenium
Я получил ошибку
Form field with id|name|label|value "username" not found.
Мой сценарий:
@javascript
Scenario: View users list
Given I am on "http://localhost/admin"Then I wait 60 seconds
And And I am authenticated as "admin" using "admin"Then I should see "List of customers"
Мой FeatureContext.php:
/**
* @Then /^I wait (\d+) seconds$/
*/
public function iWaitSeconds($seconds)
{
sleep($seconds);
}
/**
* @Given /^And I am authenticated as "([^"]*)" using "([^"]*)"$/
*/
public function andIAmAuthenticatedAsUsing($username, $password) {
$this->visit('http://localhost/admin');
$this->getSession()->getPage()->find('css','input[name="username"]')->setValue($username);
$this->getSession()->getPage()->find('css','input[name="password"]')->setValue($password);
$this->pressButton('Login');
}
Мой behat.yml:
default:
extensions:
Behat\MinkExtension\Extension:
base_url: http:localhost/admin
browser_name: chrome
javascript_session: selenium2
selenium2:
browser: chrome
goutte: ~
paths:
features: features
bootstrap: features/bootstrap
Я не могу понять, почему эта ошибка, потому что у меня есть форма с таким именем: «имя пользователя». Пожалуйста, помогите мне. Спасибо заранее.
Зачем тебе другой And
для этой линии And And I am authenticated as "admin" using "admin"
? Это не нравится прямо!
Ваша форма входа внутри http://localhost/admin
или что-то вроде http://localhost/admin/login
?
Ты говоришь Given I am on "http://localhost/admin"
в твоем корнишоне а потом звони $this->visit('http://localhost/admin');
в вашем FeatureContext. Зачем?
Я использую их для моего случая, если это помогает:
Версия 1)
/**
* @Given /^I am logged in$/
* @Given /^I am logged in as "([^"]*)"$/
*/
public function iAmLoggedIn($username = 'user')
{
$this->visit('/logout');
$this->visit('/login');
$this->fillField('username', $username);
$this->fillField('password', 'password');
$this->pressButton('_submit');
}
Версия 2)
use Behat\Behat\Context\Step;
/**
* @When /^I log in as "([^"]*)"$/
*/
public function iLogInAs($username)
{
return [
new Step\Given('I am not logged in'),
new Step\When('I go to "/login"'),
new Step\When('I fill in "username" with "'.$username.'"'),
new Step\When('I fill in "password" with "password"'),
new Step\Then('I press "_submit"'),
new Step\Then('I should be on "/welcome"'),
];
}
РЕДАКТИРОВАТЬ:
Место Then I wait 60 seconds
после Given I am on "http://localhost/admin"
шаг. Запустите свои тесты (в режиме браузера), чтобы вы могли визуально проверить, находитесь ли вы там, где находится страница входа.
/**
* @Given /^I wait (\d+) seconds$/
*/
public function iWaitSeconds($seconds)
{
sleep($seconds);
}
Пример behat.yml
default:
context:
class: Site\FrontendBundle\Features\Context\FeatureContext
parameters:
output_path: %behat.paths.base%/build/behat/output/
screen_shot_path: %behat.paths.base%/build/behat/screenshot/
extensions:
Behat\Symfony2Extension\Extension:
mink_driver: true
kernel:
env: test
debug: true
Behat\MinkExtension\Extension:
base_url: 'http://localhost/myproject/web/app_test.php/'
files_path: %behat.paths.base%/build/dummy/
javascript_session: selenium2
browser_name: firefox
goutte: ~
selenium2: ~
paths:
features: %behat.paths.base%/src
bootstrap: %behat.paths.features%/Context
# Add "-p firefox" parameter to behat command to run tests with Firefox browser
firefox:
extensions:
Behat\MinkExtension\Extension:
browser_name: firefox
Ошибка была в том, что мне пришлось удалить:
$this->visit('http://localhost/admin');
И теперь без этой строчки работает