Selenium :: WebDriver :: Error :: MoveTargetOutOfBoundsError: Элемент не может быть прокручен в представлении: [объект HTMLSpanElement] - PullRequest
3 голосов
/ 14 февраля 2012

На этой странице происходит что-то странное:

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-вебдрайвер 0.5.3

Ответы [ 4 ]

5 голосов
/ 14 февраля 2012

Редактировать: это не ошибка.

Как указали другие авторы, элемент, с которым вы взаимодействуете, находится за пределами экрана и не может быть прокручен на экране, кроме как при сложном взаимодействии.

Это, вероятно, делает то, что вы хотите:

b.div (класс: "feat-container"). Elements (css: "span") [2] .click

Что вы, вероятно, хотите сделать в этом случае, это вместо проверки:

b.div (класс: "feat-container"). Element (css: "span"). Present?

Зацикливаясь на каждом дочернем элементе, проверяя, что его ограничивающая рамка находится на экране, особенно в этом случае, что левая координата неотрицательна.

Это немного не понятно для WebDriver - к сожалению, нетдействительно хороший способ справиться с основной проблемой.

0 голосов
/ 29 мая 2013

Вы также можете использовать для отображения элемента (и увеличения страницы):

page.driver.browser.manage.window.maximize
0 голосов
/ 17 апреля 2013

У меня тоже была эта проблема.Существует также тикет .

Проблема может быть вызвана странной не прокручиваемой раскладкой, поэтому кнопка может быть доступна только в том случае, если окно было больше.

Изменение размераокно, может исправить это.

в Java это было:

driver.manage().window().setPosition(new Point(0, 0));
driver.manage().window().setSize(new Dimension(1100, 800));
0 голосов
/ 14 февраля 2012

Я думаю, что ваша проблема связана с тем, что вы пытаетесь нажать.

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

возвращает

play-icon play

Какая кнопка воспроизведения на слайде «спрятана» влево с помощью позиционирования и влево: -ahugevalue

Watir-webdriver здесь не глючит, он просто говорит вам, что не может щелкнуть по нему, так как он не может прокрутить далеко влево, поскольку горизонтальная полоса прокрутки отсутствует.

edit: кстати, система, используемая для проверки этого, сильно отличается от той, что прокомментирована выше. Я не боюсь сломать все дома, как на работе. Все актуально. Firefox 10.0.1, Ruby 1.9.2, Watir-webdriver 0.5.3, Selenium-webdriver 2.19.0 в Windows 7.

...