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

时间:2012-02-14 00:48:38

标签: 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>'

我想点击这个范围:

<span class="feature-prev-icon icon"></span>

我可以点击它:

b.span(class: "feature-prev-icon icon").click

但我想点击它:

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

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

4 个答案:

答案 0 :(得分:5)

编辑:这不是错误。

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

这可能会做你想要的:

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

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

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

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

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

答案 1 :(得分:0)

我认为您的问题源于您尝试点击的内容。

puts b.div(class: "feat-container").element(css: "a span").attribute_value("class")

返回

play-icon play

幻灯片上的播放按钮使用定位向左“隐藏”左侧: - ahugevalue

Watir-webdriver在这里没有错误,它只是告诉你它不能点击它,因为它不能滚动那么远,因为没有水平滚动条。

编辑:通过系统用于测试它的方式与上面评论的方式有很大不同。我并不像在工作中那样害怕在家打破一切。一切都是最新的。 Windows XP上的Firefox 10.0.1,Ruby 1.9.2,Watir-webdriver 0.5.3,Selenium-webdriver 2.19.0。

答案 2 :(得分:0)

我也有这个问题。 还有ticket

问题可能是由一个奇怪的不可滚动的布局引起的,所以只有在窗口较大的情况下才能触及该按钮。

因此调整窗口大小,可以修复它。

在java中它是:

driver.manage().window().setPosition(new Point(0, 0));
driver.manage().window().setSize(new Dimension(1100, 800));

答案 3 :(得分:0)

您还可以使用该元素进入视图(并最大化页面):

page.driver.browser.manage.window.maximize