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

发布于 2025-01-06 01:21:12 字数 2502 浏览 5 评论 0原文

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

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

Something strange is happening on this page:

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>'

I am trying to click this span:

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

I can click it with this:

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

but I would like to click it with this:

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情域 2025-01-13 01:21:12

编辑:这不是一个错误。

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

这可能会满足您的要求:

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

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

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

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

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

Edit: This isn't a bug.

As other answerers have indicated, the element you're interacting with is off-screen and can't be scrolled in to screen other than by complex interaction.

This probably does what you want:

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

What you probably want to do in this case is rather than checking:

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

Looping over each child, checking that its bounding box is on screen, specifically in this case that the left coordinate is non-negative.

This is a bit unintuitive of WebDriver - unfortunately, there isn't really a good way to handle the underlying problem.

醉生梦死 2025-01-13 01:21:12

我认为你的问题源于你试图点击的内容。

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

返回

play-icon play

这是幻灯片上的播放按钮,该按钮已使用定位和 left:-ahugevalue Watir-webdriver 被“隐藏”在左侧

,这里没有错误,它只是告诉您它无法单击它,因为它无法滚动到最左边,因为没有水平滚动条。

编辑:顺便说一句,用于测试这一点的系统与上面评论的系统有很大不同。我不像在工作时那样生活在担心破坏家里所有东西的恐惧中。一切都是最新的。 Windows 7 上的 Firefox 10.0.1、Ruby 1.9.2、Watir-webdriver 0.5.3、Selenium-webdriver 2.19.0。

I think your problem stems from what you're trying to click.

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

returns

play-icon play

Which is the play button on a slide that has been 'hidden' off to the left using positioning and left:-ahugevalue

Watir-webdriver is not being buggy here, it's just telling you it can't click it as it can't scroll that far left as there's no horizontal scrollbar.

edit: by the way the system used to test this differs greatly to the one commented above. I don't live in fear of breaking everything at home like I do at work. Everything is up to date. Firefox 10.0.1, Ruby 1.9.2, Watir-webdriver 0.5.3, Selenium-webdriver 2.19.0 on Windows 7.

难得心□动 2025-01-13 01:21:12

我也有这个问题。
还有一张票据

该问题可能是由奇怪的不可滚动布局引起的,因此只有在窗口更大时才能到达该按钮。

所以调整窗口大小就可以解决这个问题。

在java中是:

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

I had this issue too.
There is also a ticket.

The problem could be caused by a weird unscrollable layout, so the button could only be reached if the window was bigger.

So resizing the window, could fix it.

in java it was:

driver.manage().window().setPosition(new Point(0, 0));
driver.manage().window().setSize(new Dimension(1100, 800));
千紇 2025-01-13 01:21:12

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

page.driver.browser.manage.window.maximize

You can also use to bring the element into view (and maximize the page):

page.driver.browser.manage.window.maximize
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文