我正在使用带有chrome的watir-webdriver来自动化我的测试,现在我有点卡住了。 我在facebox中有一个表单(defunkt.io/facebox)。您可以看到此表单中有许多复选框:
irb(main):113:0> b.checkboxes.size
=> 122
我的问题是,当我尝试设置其中一个复选框时,我收到以下错误:
irb(main):111:0> b.checkbox(:id => 'week_0').set 1
Selenium::WebDriver::Error::UnknownError: Element is not clickable at point (-99999800, 242.5)
Backtrace:
0x8088d3a
0x8076225
0x807c718
0x807c9e7
0x807f6b7
0x808009d
0x8067c5c
0x8074931
0x8059fda
0x80d1d4d
0x80d3773
0x80d3aa3
start_thread [0x5e9e99]
0x10b973e
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/response.rb:50:in `assert_ok'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/common.rb:58:in `new'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/common.rb:58:in `create_response'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/default.rb:64:in `request'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/common.rb:39:in `call'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/bridge.rb:450:in `raw_execute'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/bridge.rb:428:in `execute'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/bridge.rb:264:in `clickElement'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/common/element.rb:34:in `click'
from /usr/local/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.3.9/lib/watir-webdriver/elements/checkbox.rb:25:in `set'
from (irb):111
from /usr/local/bin/irb:12:in `<main>'
我应该怎么做才能在chrome上使用watir-webdriver处理facebox?
编辑:
我发现了Chuck的TIP问题(在inspect element工具中查看元素属性)。 所以我注意到复选框的左侧位置是-999999px。
解决方案:
browser.execute_script("$('[type=checkbox]').removeClass('ui-helper-hidden-accessible')")
(因为这是造成左移位的班级)
答案 0 :(得分:1)
我发现了Chuck的TIP问题(在inspect element工具中查看元素属性)。所以我注意到复选框的左侧位置是-999999px。
解决方案:
browser.execute_script("$('[type=checkbox]').removeClass('ui-helper-hidden-accessible')")
(因为这是造成左移位的班级)
答案 1 :(得分:0)
错误让我认为事情可能不会以某种方式显示或活动。脚本是否在尝试与之交互时实际显示灯箱?您是否需要插入一个简短的暂停或等待复选框被渲染以及“弹出”灯箱以完成它的javascript代码?
如果它不可见,那么我可以看到它产生了你正在获得的那种错误。 同样,如果脚本的速度有点太快,那也可能是问题所在。
使用开发人员工具(在chrome中你可以右键单击一个元素并选择'inspect element')并查看相关元素的属性(特别是位置),以及'tree'中的元素(因为它)那个包含它的人。
你可以通过更改类或改变类的CSS来暂时“重新定位”对象以使Watir认为它是可见的,从而对此进行暴力破解。我必须为使用悬停状态隐藏或显示菜单的东西做类似的事情,无论出于什么原因'onmouseover'事件都不足以让浏览器应用不同的css伪造类。如果您已经在使用jquery,那么可以调用一些非常简单的函数来执行此类操作。 (你的一个开发人员可能能够帮助你)你可以使用.execute_script来调用代码,如果需要的话。
答案 2 :(得分:0)
试试这个。它将使用Javascript将元素移动到视图中。为我工作。
module Watir
class Element
def move_into_view
browser.execute_script(%Q[
var element = arguments[0];
element.style.position = 'absolute';
element.style.left = '10px';
element.style.top = '10px';
return true;],
self )
end
end
end