Почему драйвер Selenium Firefox считает, что мой модальный не отображается, когда у родителя есть overflow: hidden?

EDIT: я думаю, что на этом уже есть проблема:http://code.google.com/p/selenium/issues/detail?id=5717

Так что в основном я использую драйвер Firefox и div с id="page-content" вызывает сбой моего теста Селена с ошибкой, указанной в указанном вопросе:"элемент не виден и поэтому не может быть взаимодействовали с" а другой? я смог проследить проблему до того, что этот ID имеет стиль css overflow: hidden это ошибка, или я делаю что-то неправильно?

Я использую Selenium WebDriver версия: 2.33.0.0, Firefox версия: 22

источник для испытания и сайт здесь: https://github.com/tonyeung/selenium-overflow-issue

для быстрой справки: HTML ниже - моя тестовая страница. Для тех из вас, кто не знаком с angular, все его действия отображают фрагмент html в качестве модального всякий раз, когда вы нажимаете на add или edit, вы можете увидеть живой демо здесь:http://plnkr.co/edit/LzHqxAz0f2GurbL9BGyu?p=preview

<!DOCTYPE html>
<html data-ng-app="myApp">
    <head lang="en">
        <meta charset="utf-8">
        <title>Selenium Test</title>  

        <!-- // DO NOT REMOVE OR CHANGE ORDER OF THE FOLLOWING // -->
        <!-- bootstrap default css (DO NOT REMOVE) -->
        <link rel="stylesheet" href="css/bootstrap.min.css?v=1">
        <link rel="stylesheet" href="css/bootstrap-responsive.min.css?v=1">
    </head>
    <body>
        <div data-ng-controller="MyCtrl">
            <span id="added" data-ng-show="added">Added</span>
            <span id="edited" data-ng-show="edited">Edited</span>

            <div id="page-content" style="overflow:hidden">
            <!--<div id="page-content">-->
                <div class="employees view">
                    <button name="addNewEmployee" id="addNewEmployee" class="btn btn-primary" data-ng-click="add()">Add</button>
                    <button name="editEmployee" id="editEmployee" class="btn btn-primary" data-ng-click="edit()">Edit</button>

                    <div data-ng-controller="editCtrl" data-ng-include="'app/views/edit.html'"></div>
                    <div data-ng-controller="addCtrl" data-ng-include="'app/views/add.html'"></div>
                </div>
            </div>

        </div>  

        <!-- JS scripts -->
        <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>  
        <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js"></script> 
        <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
        <script src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/0.7.2/angular-strap.min.js"></script>
        <script src="app/app.js"></script>

    </body>
</html>

1 ответов


согласно исходному коду Selenium WebDriver, элемент не должен иметь overflow: hidden как стиль. (ref) (обновление Я только что понял, что сопровождающие обновили код в ref, с которым я связался, но что исходный код 2.33 включал overflow: hidden проверка. Его просто были переработаны для предположительного 2.34.)

Итак, похоже, что если сопровождающие не решат против этого, вы Сол. Но первый шаг к тому, чтобы разработчики заметили проблема заключается в добавлении проблемы в официальный репозиторий, что, похоже, вы и сделали.

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

driver.executeScript("arguments[0].setAttribute('style', 'overflow: none;')", page_content_element)

и попробуйте запустить свои тесты оттуда.