2017-05-09 84 views
0

這行代碼:behat fillField xpath給出錯誤?

$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

您不以賴特的方式使用該方法。

正如我在這裏看到的xpath被當作選擇器。 該方法需要兩個參數:
identifier - 屬性之一的值 - | XPath的,那麼你需要設定值

如果你想使用CSS字符串「ID |名稱| |標籤值」
value您首先需要使用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文件,預計什麼參數和方法將返回。

如果您正在使用的CSS/XPath的很多,你可以重寫find方法來自動檢測選擇的類型和使用它像$this->find($selector);

你也可以定義另一種方法來等待元素和處理在一個地方例外,例如waitForElement($selector)可能包含有條件的等待達10秒,並且如果找不到則拋出異常。