«TypeError: невозможно преобразовать строку в целое число» при попытке нажатия CTRL + или SHIFT + в сценарии watir-webdriver / selenium-webdriver - PullRequest
2 голосов
/ 23 октября 2011

Я пытаюсь выбрать несколько элементов в средстве выбора даты, определенном как таблица, в сценарии с огурцом, используя 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'

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

Ответы [ 3 ]

2 голосов
/ 03 ноября 2011

Что касается 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. Если это то, что вам нужно, вы можете прокомментировать его, чтобы сообщить о своих потребностях.

1 голос
/ 28 октября 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

Я не заметил, что календарь реагирует на shift или ctrl (вручную). Первый щелчок выберет дату начала, второй - дату окончания.

0 голосов
/ 31 октября 2011

Я не заметил, что календарь реагирует на shift или 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
...