Behat测试条形式

时间:2015-02-28 19:26:08

标签: bdd behat

我正在尝试使用Behat测试Stripe表单。对于条带表单,您不能拥有name属性来阻止敏感数据到达您的服务器。尽管如此,Behat的fillField方法应该寻找idtitlelabel但不起作用。

这是我的代码:

public function iPurchaseListings($quantity)
{
    $this->visit('/account/billing');
    $this->fillField('number', '4242424242424242');
    $this->fillField('exp_month', '01');
    $this->fillField('exp_year', '2018');
    $this->fillField('cvc', '123');
    $this->fillField('quantity', $quantity);
    $this->pressButton('submit');
}

目前这些是字段的ids。如果我添加name属性,它将起作用。如果我没有添加名称字段,我总会得到Malformed field path例外。

我也尝试过解决方案located here

任何帮助都会很棒。我在这里疯了。

1 个答案:

答案 0 :(得分:1)

这是错的!

  

Behat应该寻找id,title和label但是不起作用。

按照documentation中的说明查找id, name or label定位器,或查看this。另请参阅下面的DocBloc。

TraversableElement Class

 /**
  * Fills in field (input, textarea, select) with specified locator.
  *
  * @param string $locator input id, name or label
  * @param string $value   value
  *
  * @throws ElementNotFoundException
  *
  * @see NodeElement::setValue
  */
 public function fillField($locator, $value)
 {
     $field = $this->findField($locator);

     if (null === $field) {
         throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
     }

     $field->setValue($value);
 }

示例

FeatureContext类

/**
 * @Given /^I am logged in as admin$/
 */
public function iAmLoggedInAsAdmin()
{
    $this->visit('/admin');
    $this->fillField('username', 'admin');
    $this->fillField('password', 'admin');
    $this->pressButton('Login');
    $this->assertPageContainsText('Welcome Admin');
}

我刚试过这些并且一切正常。

<input type="text" id="username" value="" />
<input type="text" name="username" value="" />
<input type="text" id="username" name="username" value="" />
<input type="text" id="password" value="" />
<input type="text" name="password" value="" />
<input type="text" id="password" name="password" value="" />

备份选项

   /**
     * @When /^I fill in "([^"]*)" with "([^"]*)"$/
     *
     * @param $id
     * @throws \Exception
     */
    public function iClickAnElementWithId($id, $value)
    {
        $element = $this->getSession()->getPage()->findById($id);
        if (null === $element) {
            throw new \Exception(sprintf('Could not evaluate element with ID: "%s"', $id));
        }
        $element->setValue();

    }

如果它仍然不起作用那么说实话我不知道该说些什么。另外,您可能最好使用非常基本/普通的应用程序对其进行测试,以确定它是否与您的webform /应用程序实际相关。