Selenium ElementNotVisibleException, когда включающий div имеет примененное преобразование

Я использую среду разработки приложений Intel html5. В частности, я использую их плагин для карусели. Но я подозреваю, что знание webdriver здесь более полезно.

Принцип работы их карусели заключается в том, что страницы плавают рядом друг с другом внутри элемента div, который имеет ограниченную ширину и скрытый переполнение. Вы можете видеть только одну из страниц одновременно через div "viewport".

Когда вы нажимаете, чтобы перейти к следующему элементу div, он применяет преобразование css, чтобы анимировать скользящую страницу. Это отлично работает. Однако у webdriver есть проблемы с элементами внутри div анимации.

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

Я отследил его до этого свойства CSS, которое применяется к div анимации:

-webkit-transform: translate3d(-1024px, 0px, 0);

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

Вы можете мне помочь двумя способами:

  • Могу ли я получить селен, чтобы правильно сообщить о видимости этих элементов? Возможно, изменяя способ работы карусели? (Это с открытым исходным кодом).
  • Могу ли я сказать селену просто щелкнуть элемент в любом случае, даже если он "не виден"?

2 ответа

Решение

Это решает проблему, обходя ошибку в селене.

new Actions(driver).MoveToElement(element).Click().Perform();

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

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

el.style[$.feat.cssPrefix+"Transform"] = "translate" + translateOpen + distanceToMove.x + "px," + distanceToMove.y + "px" + translateClose;

с

el.style["margin-left"] = distanceToMove.x + "px";
el.style["margin-top"] = distanceToMove.y + "px";

который, кажется, работает.

Другие ответы приветствуются. Это ошибка, которую я должен сообщить селену?

Другие вопросы по тегам