2011-01-10 93 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'")