2011-01-10 3 views
2

У меня есть текстовое поле только для чтения на моем сайте. И мне нужно ввести дату, используя огурец и ватир. Но я не могу установить какую-либо ценность. Даже передавая значение даты с помощью метода 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

Как намекает Желько, правильный подход здесь состоит в том, чтобы выполнять те же действия, что и пользователь, то есть нажимать календарь JS. Только очень особый тип пользователя вручную выполнил бы фрагмент JavaScript для выбора даты. :) – jarib

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-форму с полями ввода текста, которые установлены в 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> 

Используя код, как «@ 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'") 
Смежные вопросы