这行代码:
$this->fillField('xpath','//fieldset[@id="address-container"]/input[@name="address_add[0][city]"]', "Toronto");
给我这个错误
Form field with id|name|label|value|placeholder "xpath" not found. (Behat\Mink\Exception\ElementNotFoundException)
我想在fillField中使用xpath的原因是因为我的html文档中实际上有多个input[@name="address_add[0][city]"]
。我想一个xpath会让我专门定位我想要填充的字段。
只填写input[@name="address_add[0][city]"]
后代fieldset[@id="address-container"]
的最佳方法是什么?
答案 0 :(得分:0)
您没有以怀特的方式使用该方法。
正如我在此处所见,xpath
被视为选择器。
该方法需要2个参数:
identifier
- 属性'id | name | label | value'之一的值
value
- 您需要设置为值的字符串
如果你想使用css | xpath,那么你需要先使用find
方法。
例如:
$this->find('xpath', 'your_selector')->setValue('your_string');
请注意,查找可能会返回
null
,使用setValue
会导致致命异常。
你应该有这样的东西:
$field = find('xpath', 'your_selector');
if ($field === null) {
// throw exception
}
$field->setValue('your_string');
您的选择器也可以写成:
#address-container input[name*=city] - this with css
或
//fieldset[@id="address-container"]//input[contains(@name, 'city')] - this with xpath
如果您对使用某种方法有任何疑问,请确保利用您的IDE编辑器,您应该找到一个php doc,其中包含预期的参数以及该方法将返回的内容。
如果你经常使用css / xpath,你可以覆盖
一样使用它find
方法自动检测选择器的类型并像$this->find($selector);
此外,您可以定义另一个方法来等待元素并在一个地方处理异常,例如
waitForElement($selector)
可能包含最多10秒的条件等待,如果找不到则抛出异常。