我想填充数据输入字段,该字段是div的子节点,其类为form
in behat
<div class="form">
<form method="post" action="abc" class="redeem-form">
<span></span>
<input type="text" value="Voucher Code" id="voucher-code" name="vocuher_code">
</form>
</div>
功能文件是:
And I filled in "voucher-code" with "7f2904204489727e" element
功能上下文文件:
/**
* @When /^(?:|I )filled in "(?P<field>(?:[^"]|\\")*)" with "(?P<value>(?:[^"]|\\")*)" element$/
*/
public function fillField($field, $values)
{
$field = $this->fixStepArgument($field);
$value = $this->fixStepArgument($value);
$element = $this->getSession()->getPage()->find('xpath','//div[@class="form"]//input[@id="'.$field.'"]');
$this->getSession()->getPage()->fillField($element, $value);
}
答案 0 :(得分:1)
如果要根据父选择,则需要使用css / xpath选择器。
你的css会是:
div.form #voucher-code
或XPath
//div[@class='form']//input[@id='voucher-code']
您可以删除fixStepArgument
行。
你的方法应该是这样的:
/**
* @When /^I fill "(?P[^"]*)" with "(?P[^"]*)"$/
*/
public function fillWith($selector, $text)
{
$element = $this->getSession()->getPage()->find('css', $selector);
if($element === null){
throw new Exception("Element $selector not found");
}else{
$element->setValue($text);
}
}
您应该避免在步骤实现中使用//div[@class="form"]//input
等硬编码值,这会降低仅使用div
类form
的元素的可用性。