此页面上发生了一些奇怪的事情:
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
答案 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