Webdriver错误:通过watir-webdriver驱动Facebox控件时,在点(- 99999800,242.



我正在使用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

相关内容

  • 没有找到相关文章

最新更新