尝试在 watir-webdriver/selenium-webdriver 脚本中按 CTRL+单击或 SHIFT+单击时出现“TypeError:无法将字符串转换为整数”
Posted
技术标签:
【中文标题】尝试在 watir-webdriver/selenium-webdriver 脚本中按 CTRL+单击或 SHIFT+单击时出现“TypeError:无法将字符串转换为整数”【英文标题】:"TypeError: can't convert String into Integer" when trying to CTRL+click or SHIFT+click in watir-webdriver/selenium-webdriver script 【发布时间】:2011-10-23 09:04:16 【问题描述】:我正在尝试在 Chrome 浏览器上使用 watir-webdriver/selenium-webdriver 在黄瓜脚本中定义为表格的日期选择器中选择多个项目。
日期选择器允许 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
但我得到“TypeError: can't convert String into Integer”。
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'
有人可以在他的代码中使用它吗? 或者有没有人将修改器发送到鼠标事件的解决方案? 提前致谢。
【问题讨论】:
您能否提供示例 html 或将我们推荐给带有您正在使用的控件的演示站点?这将有助于重现问题和/或提出解决方案 嗨,我已经用单元格的示例代码更新了这个问题。 我已经删除了 watir-webdriver 标签,因为你没有使用它。您正在使用 selenium-webdriver。您添加 watir-webdriver 标签有什么原因吗? 我添加了 watir-webdriver 标签,因为可能一些 watir-webdriver 用户遇到了这个问题并通过其他方式解决了它。但如果它困扰你,好吧,让我们随你喜欢吧。这个想法是我愿意使用任何解决方案,无论我使用 selenium-webdriver 还是 watir-webdriver,只要我可以继续我的工作 :) 我希望你理解我添加标签的原因 :) 您应该明确表示您对另一个工具中的解决方案持开放态度。我没有从你的问题中得到这一点。您提供的 HTML 是不够的。如果您能提供指向该页面的链接,那将是最好的。如果这不可能,那么提供仍然重现日期选择器功能的最小 HTML。 【参考方案1】:关于 Watir-Webdriver,我向 Jari(Watir-webdriver 背后的主要驱动力)询问了这个问题,得到了以下答案,如果你非常需要它,这可能会给你一条追求的道路
watir-webdriver 中没有任何内容(目前),但您应该 能够使用 WebDriver 中的操作 API 来做到这一点(请参阅 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
我还在 Github 上的 Watir-Webdriver 项目中创建了一个feature-request,如果这是您需要的东西,您可能想对其发表评论以了解您的需求。
【讨论】:
非常感谢您。我在 Win 机器上运行我的测试。我认为您在 Watir-Webdriver 请求中编写了我需要的所有内容:)。 watir-webdriver 适用于 Windows 系统。限制可能是 webdriver 中的“操作 API”。 Watir 使用一些不同的方法来做事,但我也不知道这是否可能。我正在 google watir general group 上进行一些查询。 非常感谢您的努力。【参考方案2】:这将从页面上的第三个日历中选择 2009 年 12 月 1-6 日:
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(手动)。第一次单击将选择开始日期,第二次单击将选择结束日期。
【讨论】:
感谢 Željko 的努力,很抱歉浪费了您的时间。我没有注意那个网格,是的,你是对的,它不响应修饰符。但这不是我的解决方案的答案。我将更深入地寻找一个与我想要交互的具有相同属性的日期选择器。 或者您可以将页面保存到磁盘并删除除日期选择器(和所需的 javascript)之外的所有内容并将其发布到某处(dropbox、github...)。【参考方案3】:我没有注意到日历响应 shift 或 ctrl(手动)。您最多可以通过单击日期选择 5 天。如果您选择第六个,您选择的第一个将自动取消选择。
这将选择 2011 年 11 月 1 日和 3 日:
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
【讨论】:
我很感激这些努力,但仍然没有解决我的问题。在我的代码中,当点击第二个日期时,第一个日期被取消选择 好吧,您要么必须提供您的应用程序的链接,要么提供下载页面。 这是一个允许转移的日期选择器:demo.essentialobjects.com/Demos/Calendar/Designs/… 是的,essentialobjects 的新更新站点确实展示了您指出的行为。然而,我对如何管理 shift-click 操作感到困惑。 我现在为此苦苦挣扎了一段时间,但我没有想法。以上是关于尝试在 watir-webdriver/selenium-webdriver 脚本中按 CTRL+单击或 SHIFT+单击时出现“TypeError:无法将字符串转换为整数”的主要内容,如果未能解决你的问题,请参考以下文章
Break 在有资源的尝试中不起作用,但在没有资源的尝试中起作用