我正在尝试使用Behat测试Stripe表单。对于条带表单,您不能拥有name
属性来阻止敏感数据到达您的服务器。尽管如此,Behat的fillField
方法应该寻找id
,title
和label
但不起作用。
这是我的代码:
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
任何帮助都会很棒。我在这里疯了。
答案 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 /应用程序实际相关。