我的网站中有一个只读文本字段。我需要用黄瓜和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
请帮助我,我遇到了麻烦。
答案 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进行了测试。