【问题标题】:Selenium::WebDriver::Error::MoveTargetOutOfBoundsError: Element cannot be scrolled into view:[object HTMLSpanElement]Selenium::WebDriver::Error::MoveTargetOutOfBoundsError: 元素无法滚动到视图中:[object HTMLSpanElement]
【发布时间】:2014-05-30 23:44:04
【问题描述】:

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

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

【问题讨论】:

  • 我刚刚在 Windows Vista Home Premium 上的 FF10 上得到了相同的结果。这是一个我很薄弱的领域,但我会努力了解更多。
  • 问题在 Gentoo Linux, Firefox 10.0, ruby​​ 1.9.2p290, selenium-webdriver 2.19.0, watir-webdriver 0.5.3 上可重现但是,只要同样的错误,它就不是 watir-webdriver 问题发生在普通 selenium-webdriver b.find_element(:css =&gt; "div.feat-container").find_element(:css =&gt; "a span").click
  • 我的运行但它点击了某个地方的播放按钮。 watir-webdriver 0.3.9, selenium-webdriver 2.12.1 in Windows 7, Firefox 8. 所以我有点落后了。

标签: watir watir-webdriver


【解决方案1】:

编辑:这不是错误。

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

这可能是你想要的:

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

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

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

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

这对 WebDriver 有点不直观 - 不幸的是,没有真正的好方法来处理潜在问题。

【讨论】:

  • 谢谢,我发现了这个错误,我已经在关注它,但我不确定它是否已连接。我忘了把它包括在问题中。
  • 不太确定这个错误是否发生在这里。据我所知,您返回的元素确实在 watir-webdriver 可以与之交互的页面区域之外。
【解决方案2】:

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

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

返回

play-icon play

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

Watir-webdriver 在这里没有问题,它只是告诉你它不能点击它,因为它不能向左滚动,因为没有水平滚动条。

编辑:顺便说一下,用于测试的系统与上面评论的系统有很大不同。我不会像在工作中那样害怕破坏家里的一切。一切都是最新的。 Windows 7 上的 Firefox 10.0.1、Ruby 1.9.2、Watir-webdriver 0.5.3、Selenium-webdriver 2.19.0。

【讨论】:

    【解决方案3】:

    我也有这个问题。 还有一个ticket

    这个问题可能是由一个奇怪的不可滚动布局引起的,所以只有当窗口更大时才能到达按钮。

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

    在java中是:

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

    【讨论】:

      【解决方案4】:

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

      page.driver.browser.manage.window.maximize
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 2019-08-24
        • 1970-01-01
        • 2019-09-28
        • 1970-01-01
        • 2016-11-01
        相关资源
        最近更新 更多