我正在使用watir-webdriver与chrome来自动化我的测试,我现在有点卡住。我有一个窗体内的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>'
我应该怎么做处理facebox与watir-webdriver在chrome上?
编辑:我在Chuck的TIP中发现了这个问题(在inspect element工具中查看元素属性)。所以我注意到复选框的左位置是-999999px。
解决方案:
browser.execute_script("$('[type=checkbox]').removeClass('ui-helper-hidden-accessible')")
(因为这个类导致了左移)
我在Chuck的TIP中发现了这个问题(在inspect element工具中查看元素属性)。所以我注意到复选框的左位置是-999999px。
解决方案:
browser.execute_script("$('[type=checkbox]').removeClass('ui-helper-hidden-accessible')")
(因为这个类导致了左移)
这个错误让我认为这个东西可能不可见或不活动。脚本在尝试与灯箱交互时是否实际显示灯箱?你需要插入一个短暂的暂停或等待复选框得到渲染和javascript代码,"弹出"灯箱来完成它的事情?
如果它不可见,那么我可以看到它产生的错误你得到的那种。同样,如果脚本只是有点太快,这也可能是问题。
使用开发人员工具(在chrome中,您可以右键单击一个元素并选择"检查元素")并查看所讨论的元素的属性(特别是位置),以及包含该元素的"树"上的元素(就像它一样)。
你可以通过改变类来强行解决这个问题,或者改变类的CSS来临时"重新定位"对象,这样Watir就会认为它是可见的。我不得不做一些类似的东西,使用悬停状态来隐藏或显示菜单,无论出于何种原因'onmouseover'事件不足以让浏览器应用不同的css伪类。如果您已经在使用jquery,那么可以调用一些非常简单的函数来完成这类事情。(你的一个开发人员可能会帮助你解决这个问题)如果需要,你可以使用.execute_script来调用这样的代码。
试试这个。它将使用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