2011-09-26 34 views
4

我寫貝哈特測試,我需要改變一個隱藏的輸入字段灌裝隱藏式輸入,貝哈特

<input type="hidden" id="input_id" ..... /> 

我需要更改此輸入字段的值的價值,但我不斷收到

Form field with id|name|label|value "input_id" not found 

我一直在使用步驟

$steps->And('I fill in "1" for "input_id"', $world); 

是否有一些特別的東西,其需要做修改隱藏輸入端F ields?

回答

2

它的設計意圖。貂是用戶+瀏覽器模擬器。它模擬一切,真正的用戶可以在真正的瀏覽器中完成。用戶當然不能填充頁面上的隱藏字段 - 他只是看不到它們。

貂皮不是爬蟲,它是一個瀏覽器模擬器。 Mink的整個想法是通過簡單而乾淨的API來描述真正的用戶交互。如果有什麼,該用戶不能通過真正的瀏覽器 - 你不能用貂皮做。

(來源:http://groups.google.com/group/behat/browse_thread/thread/f06d423c27754c4d

8

Rev是正確的。如果真正的用戶可以通過單擊按鈕或鏈接通過JavaScript更改輸入字段。嘗試這樣做。對用戶不可見的字段也對Mink不可見。

要不然你可以做的是從你的情況下調用$session->executeScript($javascript)與$的JavaScript像

$javascript = "document.getElementById('input_id').value='abc'"; 
$this->getSession()->executeScript($javascript); 

,並檢查其是否正常工作

+0

$ session從哪裏來? –

10

儘管用戶可以不填隱藏字段,也有有些情況下,如果希望能夠填充隱藏字段進行測試(通常規則有例外情況)。您可以使用您的功能上下文類中的下一步按名稱填充隱藏字段:

/** 
* @Given /^I fill hidden field "([^"]*)" with "([^"]*)"$/ 
*/ 
public function iFillHiddenFieldWith($field, $value) 
{ 
    $this->getSession()->getPage()->find('css', 
     'input[name="'.$field.'"]')->setValue($value); 
} 
+0

例如,我用它來測試帶自定義驗證器的ReCaptcha小部件(它只是在測試環境下根據預定義的值進行驗證),而無需在真實瀏覽器中運行。 – WayFarer

+0

這也是測試服務器端驗證黑客的好方法。 – branchgabriel