只读文本字段

时间:2011-01-10 05:39:14

标签: cucumber watir readonly textfield

我的网站中有一个只读文本字段。我需要用黄瓜和watir输入日期。但我无法设定任何价值。即使用value =方法传递date的值,我也无法输入任何输出。有一个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

请帮助我,我遇到了麻烦。

4 个答案:

答案 0 :(得分:2)

这与xboxer21所说的一致。我发现这个代码在一个有类似日历小部件的网站上为我工作。

假设您有一个HTML表单,其输入文本字段设置为readonly:

<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>

在Ruby Watir脚本中使用像'@ ie.text(:name,“FromDate”)。set(“3/23/2011”)'这样的代码会导致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'")

答案 1 :(得分:0)

尝试执行JavaScript本身。

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

答案 2 :(得分:0)

嗯,文本字段是只读的,如错误消息所示。这意味着它无法改变。如果没有Watir,您将如何更改文本字段的值?您能提供该页面或相关HTML的链接吗?

答案 3 :(得分: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进行了测试。