2011-01-10 141 views
2

我在我的網站中有一個只讀文本字段。我需要使用黃瓜和watir輸入日期。但我無法設定任何價值。即使通過value =方法傳遞日期的值我不能輸入任何輸出。有一個JavaScript日曆。只讀文本字段

我寫道:

browser.text_field(:name => "deal[start_date]").value = 'test' 

它顯示了以下錯誤:

Watir::Exception::ObjectReadOnlyException: Watir::Exception::ObjectReadOnlyException 
    from /var/lib/gems/1.8/gems/watir-webdriver-0.1.7/lib/watir-webdriver/elements/element.rb:252:in `assert_writable' 
    from /var/lib/gems/1.8/gems/watir-webdriver-0.1.7/lib/watir-webdriver/elements/text_field.rb:24:in `value=' 
    from (irb):10 

請幫助我,我中了麻煩。

回答

0

嘗試執行JavaScript本身。

browser.document.parentWindow.execScript("Date_JS_script('date')") 
+2

正如Željko所暗示的,這裏的正確方法是執行用戶所做的相同步驟,即單擊JS日曆。只有非常特殊的用戶纔會手動執行一段JavaScript來選擇日期。 :) – jarib 2011-01-12 00:53:58

0

那麼,文本字段是隻讀的,如錯誤消息所述。這意味着它不能改變。如何在沒有Watir的情況下更改文本字段的值?你能提供鏈接到頁面或相關的HTML嗎?

0

這是我做的一個只讀的文本字段中輸入一個日期,使用的JS日曆腳本是http://www.dynarch.com/projects/calendar/

旁邊有哪個當點擊它顯示的日曆插件的日期字段的小圖標。

browser.image(:id,"datewidget-trigger").click # Will display the Calendar 
browser.send_keys("{ENTER}") # Will select current date 

如果你想選擇一個將來的日期或之前的日期

browser.send_keys("{LEFT}") 
browser.send_keys("{RIGHT}") 

這已經只能用IE瀏覽器進行測試。

2

這與xboxer21注意到的一致。我發現這個代碼在我的網站上有一個類似的日曆小部件。

比方說你有與被設置爲只讀輸入文本字段的HTML表單:

<form name="FindRange" method="post" action="FindRange.asp" onsubmit="return false"> 
... 
<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
<tr> 
    <td colspan="3" class="FieldLabel"> 
    <input type="text" name="FromDate" size="16" readonly="true" style="width:85px; background-color:#F8F6E7;"> 
    </td> 
    <td> 
    <input type="text" name="ToDate" size="16" readonly="true" style="width:85px; background-color:#F8F6E7;"> 
    </td> 
</tr> 
... 
</form> 

使用代碼,如「@ ie.text。(:名稱, 「沒有fromdate」)集(「3/23/2011「)在Ruby Watir腳本中會導致Ruby中的錯誤,說明該字段是隻讀的。但使用eval()方法可能允許您使用Javascript在幕後設置只讀字段。

#Code above these lines instantiate the Watir object in @ie and navigate to the page #containing the HTML form 
#named 'FindRange' 
@ie.document.parentWindow.eval("document.FindRange.FromDate.value = '3/23/2011'") 
@ie.document.parentWindow.eval("document.FindRange.ToDate.value = '3/24/2011'")