默认情况下,框架将通过一组可能的选择器。您不必显式编写步骤定义,除非您想将它们分组以在一个步骤中执行多项操作。只需执行两个步骤
When I fill in "grizzlist-quicksearch" with "sometext"
And I press "delete-bt"
这些步骤定义是内置的,因此您无需执行任何其他操作。但是这行不通,因为我在这一步中放入的东西是 css。正确的方法是匹配其他东西。
When I fill in "valueOfInputNameAttribute" with "sometext"
And I press "valueOfSubmitButtonNameAttribute"
例如,这里是框架使用的代码,您可以在您的功能中使用
https://github.com/Behat/MinkExtension/blob/master/src/Behat/MinkExtension/Context/MinkContext.php
寻找任何使用 fillField
您会注意到它正在使用 fillField 为您完成工作
如果您深入研究源代码,您会在 Mink/Element 的 traversableelement.php 中找到它
/**
* Fills in field (input, textarea, select) with specified locator.
*
* @param string $locator input id, name or label
* @param string $value value
*
* @throws ElementNotFoundException
*/
public function fillField($locator, $value)
{
$field = $this->findField($locator);
if (null === $field) {
throw new ElementNotFoundException(
$this->getSession(), 'form field', 'id|name|label|value', $locator
);
}
$field->setValue($value);
}
它正在使用定位器,它将尝试使用您在特征中通过 id|name|label|value 提供的文本来查找输入元素
因此,您应该考虑在您的 id 属性中使用唯一的 id,或者如果您在输入中的 name 属性是唯一的,请使用它来代替.. 等等.. 等等...
为了让你专注于使用 css 的事情,需要一个新的步骤 def,这意味着编写你可能不需要编写但有时你必须编写的代码。
如果您真的只限于使用 css 来查找您的页面元素,那么在您的 FeatureContext 中使用这样的自定义步骤定义
/**
* @When /^I fill in the quicksearch with "([^"]*)"$/
*/
public function iFillInTheQuickSearchWith($value)
{
$element = $session->getPage()->find('css', 'INPUT#grizzlist-quicksearch');
$element->setValue($value);
}
希望这有助于您入门。刚开始时,理解 BDD 框架可能会很困难。