Selenium :: WebDriver :: Error :: MoveTargetOutOfBoundsError:元素无法滚动到视图中:[object HTMLSpanElement]

Žel*_*pin 3 watir watir-webdriver

这个页面上发生了一些奇怪的事情:

require "watir-webdriver"
b = Watir::Browser.new
b.goto "http://mideastunes.com/"
b.div(class: "feat-container").element(css: "a span").present?
 => true 
b.div(class: "feat-container").element(css: "a span").click

Selenium::WebDriver::Error::MoveTargetOutOfBoundsError: Element cannot be scrolled into view:[object HTMLSpanElement]
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize'
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/http/common.rb:59:in `new'
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/http/common.rb:59:in `create_response'
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/http/default.rb:64:in `request'
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call'
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/bridge.rb:590:in `raw_execute'
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/bridge.rb:568:in `execute'
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/bridge.rb:350:in `clickElement'
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/common/element.rb:34:in `click'
    from /Users/zeljko/.rvm/gems/ruby-1.9.2-p290@gretel/gems/watir-webdriver-0.5.3/lib/watir-webdriver/elements/element.rb:107:in `click'
    from (irb):48
    from /Users/zeljko/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)

我想点击这个范围:

<span class="feature-prev-icon icon"></span>
Run Code Online (Sandbox Code Playgroud)

我可以点击它:

b.span(class: "feature-prev-icon icon").click
Run Code Online (Sandbox Code Playgroud)

但是我想点击它:

b.div(class: "feat-container").element(css: "a span").click
Run Code Online (Sandbox Code Playgroud)

环境:Mac OS X 10.7.3,Firefox 10.0.1,ruby 1.9.2p290,selenium-webdriver 2.19.0,watir-webdriver 0.5.3

Dan*_*all 5

编辑:这不是一个错误.

正如其他回答者所指出的那样,您正在与之交互的元素是屏幕外的,除了通过复杂的交互之外,无法滚动到屏幕.

这可能会做你想要的:

b.div(class:"feat-container").elements(css:"a span")[2] .click

在这种情况下你可能想做的不是检查:

b.div(class:"feat-container").element(css:"a span").present?

循环遍历每个孩子,检查其边界框是否在屏幕上,特别是在这种情况下左边坐标是非负的.

这有点不直观的WebDriver - 遗憾的是,没有一个很好的方法来处理潜在的问题.