我试图围绕Drupal项目进行一些测试(但是Behat已经不在了),但是我在Mink及其会话中遇到了麻烦,我必须承认我没有任何关于我正在做什么。
到目前为止,这是我的文件:
FeatureContext.php
use Drupal\DrupalExtension\Context\RawDrupalContext; #not used
use Behat\Mink\Exception\ExpectationException;
use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Mink\Exception\ElementNotFoundException;
use Behat\Mink\Session;
use Behat\MinkExtension\Context\MinkContext;
use Behat\Behat\Context\Context; #not used
use Behat\Mink\Mink;
use DMore\ChromeDriver\ChromeDriver;
/**
* Defines application features from the specific context.
*/
class FeatureContext extends MinkContext implements SnippetAcceptingContext {
protected $mink;
/**
* FeatureContext constructor.
* Initializes context.
* PLEASE NOTE THAT I'M NOT SURE ABOUT THIS, BUT IT SEEMS TO WORK SO FAR
* Every scenario gets its own context instance.
* You can also pass arbitrary arguments to the
* context constructor through behat.yml.
*/
public function __construct() {
$this->mink = new Mink(array(
'browser' => new Session(new ChromeDriver('http://localhost:9222', null, 'http://www.website.rec'))
));
// The rest of my custom functions
}
}
behat.yml
default:
suites:
default:
contexts:
- FeatureContext
- Drupal\DrupalExtension\Context\DrupalContext
- Drupal\DrupalExtension\Context\MinkContext
- Drupal\DrupalExtension\Context\MessageContext
- Drupal\DrupalExtension\Context\DrushContext
extensions:
DMore\ChromeExtension\Behat\ServiceContainer\ChromeExtension: ~
Behat\MinkExtension:
browser_name: chrome
base_url: http://www.spheria.rec
sessions:
default:
chrome:
api_url: http://localhost:9222
Drupal\DrupalExtension:
blackbox: ~
test.feature
Feature: Sample feature
Scenario: Arrived on website, checking out what's around me
Given I am an anonymous user
And I go to "/"
And I should see "Se connecter"
And I should see "Nom d'utilisateur"
And I should see "Mot de passe"
When I fill in "admin@spheria.com" for "name"
And I fill in "admin" for "pass"
And I press "Se connecter"
Then I should get a 200 HTTP response
And the url should match "/dashboard"
And I should see "Tableau de bord"
我的问题是如果我在behat文件和FeatureContext中使用MinkContext,控制台会告诉我每个函数都已声明两次(至少MincContext::PressButton
但我不会感到惊讶问题会发生在其他事情上)
当我从behat.yml
和FeatureContext中删除它时,它无法识别任何内容,并要求我定义这些函数,这是我猜的。
当我仅在behat文件或FeatureContext文件中使用MinkContext时,我收到一条错误说:
Mink实例尚未在Mink上下文类中设置。你启用了Mink Extension吗? (RuntimeException的)
我使用的是DMore Chrome驱动程序,因为我无法正常使用Selenium运行Chrome,而且我觉得构造函数中的Mink实例化会造成一些麻烦。
说我完全迷失了应该做的事情,这是一种委婉说法。
我该如何解决这个问题?
提前谢谢
答案 0 :(得分:1)
您只需要extend MinkContext
一次,否则每次扩展都会看到重复的步骤。
behat.yml
的一个上下文已经延伸MinkContext
,因此您需要:
FeatureContext
或
FeatureContext
不应该MinkContext
而是RawMinkContext