behat fillField xpath给出错误?

时间:2017-05-09 05:41:26

标签: behat

这行代码:

$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"]的最佳方法是什么?

1 个答案:

答案 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秒的条件等待,如果找不到则抛出异常。