TypeError: невозможно преобразовать строку в целое число при попытке CTRL+щелчок или SHIFT+щелчок в сценарии watir-webdriver/selenium-webdriver

Я пытаюсь выбрать несколько элементов в средстве выбора даты, определенном как таблица, в скрипте огурца, используя watir-webdriver/selenium-webdriver в браузере Chrome.

В средстве выбора даты можно использовать Ctrl и Shift в качестве модификаторов.

Это код ячейки:

<div type="button" class="datepicker_day" onclick="if(!ample.$instance(this).$isAccessible()) return; DatePicker.onSelectDay(ample.$instance(this), '2011/06/03')" onmouseover="if(!ample.$instance(this).$isAccessible()) return;if (!this.className.match(/_day-disabled/)) this.className += 'datepicker_day-hover'" onmouseout="if(!ample.$instance(this).$isAccessible()) return; if (!this.className.match(/_day-disabled/)) this.className = this.className.replace('datepicker_day-hover', '')">3</div>

И это пример того, как ведет себя средство выбора даты -

http://demo.essentialobjects.com/Demos/Calendar/Designs/Windows%20(Multi-Month)/Demo.aspx


Я пытался использовать:

driver.action.key_down(:shift).
click(element).
click(second_element).
perform

но я получаю сообщение "Ошибка типа: невозможно преобразовать строку в целое число".

from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/response.rb:59:in `[]'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/response.rb:59:in `add_backtrace'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/response.rb:23:in `error'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/response.rb:50:in `assert_ok'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/response.rb:15:in `initialize'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/http/common.rb:54:in `new'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/http/common.rb:54:in `create_response'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/http/default.rb:64:in `request'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/http/common.rb:35:in `call'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/bridge.rb:430:in `raw_execute'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/bridge.rb:408:in `execute'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/remote/bridge.rb:274:in `sendModifierKeyToActiveElement'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/common/keyboard.rb:26:in `press'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/common/action_builder.rb:122:in `block in perform'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/common/action_builder.rb:121:in `each'
from C:/Ruby/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.9.1/lib/selenium/webdriver/common/action_builder.rb:121:in `perform'

Кто-нибудь смог использовать это в своем коде? Или у кого-нибудь есть решение для отправки модификаторов на события мыши? Заранее спасибо.


person GMD    schedule 23.10.2011    source источник
comment
Можете ли вы предоставить образец HTML или, возможно, порекомендовать нам демонстрационный сайт с используемым вами элементом управления? это помогло бы воспроизвести проблему и/или, возможно, найти решение   -  person Chuck van der Linden    schedule 26.10.2011
comment
Привет, я обновил вопрос с образцом кода для ячейки.   -  person GMD    schedule 26.10.2011
comment
Я удалил тег watir-webdriver, потому что вы его не используете. Вы используете selenium-webdriver. Есть ли причина, по которой вы снова добавили тег watir-webdriver?   -  person Željko Filipin    schedule 26.10.2011
comment
Я добавил тег watir-webdriver, потому что, возможно, у некоторых пользователей watir-webdriver была эта проблема, и они решили ее другими способами. Но если вас это смущает, ок, оставим как вам угодно. Идея состоит в том, что я готов использовать любое решение, независимо от того, использую ли я selenium-webdriver или watir-webdriver, пока я могу продолжать свою работу :) Надеюсь, вы понимаете мои причины добавить тег :)   -  person GMD    schedule 26.10.2011
comment
Вы должны четко указать, что вы открыты для решения в другом инструменте. Я не понял этого из вашего вопроса. Предоставленного вами HTML недостаточно. Было бы лучше, если бы вы дали ссылку на страницу. Если это невозможно, предоставьте минимальный HTML-код, который по-прежнему воспроизводит функциональность средства выбора даты.   -  person Željko Filipin    schedule 27.10.2011
comment
Добавил ссылку на то, что похоже на то, что я тестирую.   -  person GMD    schedule 27.10.2011
comment
Теперь вы говорите. :) Смотрите мой ответ.   -  person Željko Filipin    schedule 28.10.2011


Ответы (3)


Что касается Watir-Webdriver, я спросил об этом Яри (основную движущую силу Watir-webdriver) и получил следующий ответ, который может дать вам путь, по которому нужно идти, если вам это нужно достаточно сильно.

В watir-webdriver ничего не выставлено (пока), но вы сможете сделать это с помощью API действий в WebDriver (см. http://rubydoc.info/gems/selenium-webdriver/2.10.0/Selenium/WebDriver/ActionBuilder). Я не уверен, насколько хорошо это поддерживается в браузерах, но из тестов Java (которые являются наиболее обширными) похоже, что в настоящее время он поддерживается только в Firefox + Linux:

http://code.google.com/p/selenium/source/browse/trunk/java/client/test/org/openqa/selenium/interactions/CombinedInputActionsTest.java#50

Я также создал feature-request в проекте Watir-Webdriver на Github, если это то, что вам нужно, вы можете прокомментировать это, чтобы сообщить о своих потребностях.

person Chuck van der Linden    schedule 03.11.2011
comment
Большое спасибо за это. Я запускаю свои тесты на машинах Win. Я думаю, что вы написали все, что мне было нужно в запросе Watir-Webdriver :) . - person GMD; 04.11.2011
comment
watir-webdriver работает в системах Windows ... ограничение, вероятно, связано с «API действий» в webdriver. Watir использует несколько разных методов, чтобы делать что-то, но я не знаю, возможно ли это и там. Я делаю несколько запросов об этом в общей группе google watir. - person Chuck van der Linden; 04.11.2011
comment
Большое спасибо за ваши усилия. - person GMD; 05.11.2011

Это выберет 1-6 декабря 2009 года из третьего календаря на странице:

require "watir-webdriver"
browser = Watir::Browser.new
browser.goto "http://www.eyecon.ro/datepicker/"
browser.p(:id => "date3").span(:text => "1").click
browser.p(:id => "date3").span(:text => "6").click

Не заметил, чтобы календарь отзывался на шифт или ctrl (вручную). Первый щелчок выберет дату начала, второй — дату окончания.

person Željko Filipin    schedule 28.10.2011
comment
Спасибо Желько за усилия, и я сожалею, что потратил ваше время. Я не обращал внимания на эту сетку, и да, вы правы, она не реагирует на модификаторы. Но это не ответ на мое решение. Я буду больше искать средство выбора даты с теми же свойствами, что и тот, с которым я хочу взаимодействовать. - person GMD; 28.10.2011
comment
Или вы можете сохранить страницу на диск и удалить все, кроме средства выбора даты (и требуемого javascript), и опубликовать его где-нибудь (dropbox, github...). - person Željko Filipin; 28.10.2011

Не заметил, чтобы календарь отзывался на шифт или ctrl (вручную). Вы можете выбрать до 5 дней, нажав на день. Если вы выберете шестой, первый, который вы выбрали, будет автоматически снят с выбора.

Это выберет 1 и 3 ноября 2011 года:

require "watir-webdriver"
browser = Watir::Browser.new
browser.goto "http://nogray.com/calendar.php#tryit"
browser.span(:id => /ng_button_.*_icon/, :index => 1).click # open calendar
browser.td(:id => /11_1_2011/).click
browser.td(:id => /11_3_2011/).click
person Željko Filipin    schedule 31.10.2011
comment
Я ценю усилия, но до сих пор не решает мою проблему. В моем коде при нажатии на вторую дату первая отменяется - person GMD; 31.10.2011
comment
Ну, вы должны либо предоставить ссылку на ваше приложение, либо предоставить страницу для загрузки. - person Željko Filipin; 31.10.2011
comment
Это одно средство выбора даты, позволяющее сдвиг: демонстрация. essentialobjects.com/Demos/Calendar/Designs/ - person GMD; 31.10.2011
comment
Да, новый обновленный сайт на основных объектах действительно демонстрирует указанное вами поведение. Однако я застрял с точки зрения того, как мы можем управлять операцией Shift-щелчок. - person Chuck van der Linden; 03.11.2011
comment
Я борюсь с этим некоторое время, но у меня закончились идеи. - person GMD; 03.11.2011