在父div具有behat中的类形式的输入字段中填充数据

时间:2016-09-19 07:59:24

标签: html behat

我想填充数据输入字段,该字段是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);
}

1 个答案:

答案 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等硬编码值,这会降低仅使用divform的元素的可用性。