Ошибка веб-драйвера: Элемент не активен в точке (-99999800, 242.5) при управлении Facebox через watir-webdriver - PullRequest
1 голос
/ 06 декабря 2011

Я использую watir-webdriver с chrome для автоматизации моих тестов, и сейчас я немного застрял. У меня есть форма внутри facebox (defunkt.io/facebox). В этой форме есть много флажков:

irb(main):113:0> b.checkboxes.size
=> 122

Моя проблема, когда я пытаюсь установить один из этих флажков, я получаю следующую ошибку:

irb(main):111:0> b.checkbox(:id => 'week_0').set 1
Selenium::WebDriver::Error::UnknownError: Element is not clickable at point (-99999800, 242.5)
Backtrace:
    0x8088d3a
    0x8076225
    0x807c718
    0x807c9e7
    0x807f6b7
    0x808009d
    0x8067c5c
    0x8074931
    0x8059fda
    0x80d1d4d
    0x80d3773
    0x80d3aa3
    start_thread [0x5e9e99]
    0x10b973e

from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/response.rb:50:in `assert_ok'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/common.rb:58:in `new'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/common.rb:58:in `create_response'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/default.rb:64:in `request'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/common.rb:39:in `call'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/bridge.rb:450:in `raw_execute'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/bridge.rb:428:in `execute'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/bridge.rb:264:in `clickElement'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/common/element.rb:34:in `click'
from /usr/local/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.3.9/lib/watir-webdriver/elements/checkbox.rb:25:in `set'
from (irb):111
from /usr/local/bin/irb:12:in `<main>'

Что мне делать, чтобы работать с лицевой панелью с помощью watir-webdriver на chrome?

EDIT:

Я обнаружил проблему с подсказкой от Чака (посмотрите на атрибуты элементов в инструменте проверки элементов). Поэтому я заметил, что у флажков было -999999px левое положение.

Решение:

browser.execute_script("$('[type=checkbox]').removeClass('ui-helper-hidden-accessible')")

(поскольку это был класс, вызывающий левый отрицательный сдвиг)

Ответы [ 3 ]

1 голос
/ 11 февраля 2012

Я обнаружил проблему с подсказкой от Чака (посмотрите на атрибуты элементов в инструменте проверки элементов).Поэтому я заметил, что флажки имели левую позицию -999999px.

Решение:

browser.execute_script("$('[type=checkbox]').removeClass('ui-helper-hidden-accessible')")

(так как это был класс, вызывающий левый отрицательный сдвиг)

0 голосов
/ 18 февраля 2013

Попробуй это. Это переместит элемент в вид, используя Javascript. Работал на меня.

module Watir
  class Element
    def move_into_view
      browser.execute_script(%Q[
        var element = arguments[0];
        element.style.position = 'absolute';
        element.style.left = '10px';
        element.style.top = '10px';
        return true;],
        self )
    end
  end
end
0 голосов
/ 07 декабря 2011

Ошибка заставляет меня думать, что вещь может не быть видимой или активной как-то. Действительно ли скрипт отображает лайтбокс в то время, когда он пытается с ним взаимодействовать? Вам нужно вставить короткую паузу или подождать, пока флажок не будет отображен, и код JavaScript, который «выскакивает» из лайтбокса, чтобы закончить свою работу?

Если он не виден, то я могу видеть, что он выдает ошибку, которую вы получаете. Аналогичным образом, если сценарий работает слишком быстро, это также может быть проблемой.

Используйте инструменты разработчика (в chrome вы можете щелкнуть правой кнопкой мыши по элементу и выбрать «осмотреть элемент») и посмотреть на свойства (в частности, положение) рассматриваемого элемента, а также элементы далее вверх по «дереву» (как оно были) которые его содержат.

Возможно, вам удастся обойти это, изменив класс или изменив CSS, чтобы класс временно «переместил» объект так, что Ватир считает его видимым. Я должен был сделать нечто подобное для вещей, которые использовали состояние наведения, чтобы скрыть или показать меню, где по какой-то причине события «onmouseover» не были достаточно хороши для браузера, чтобы применить другой pssedoclass css. Если вы уже используете jquery, есть несколько довольно простых функций, которые можно вызывать для подобных вещей. (один из ваших разработчиков может помочь вам с этим). Вы можете использовать .execute_script для вызова такого кода, если это необходимо.

...