为什么Selenium Firefox驱动程序会在父进程溢出时认为我的模态没有显示:隐藏?

时间:2013-07-12 21:30:20

标签: c# angularjs selenium-webdriver selenium-firefoxdriver

编辑:我认为已经存在一个问题:http://code.google.com/p/selenium/issues/detail?id=5717

所以基本上我正在使用Firefox驱动程序而且id="page-content"的div导致我的selenium测试失败,并且引用的问题中列出了错误:"Element is not currently visible and so may not be interacted with" but another is?我能够追踪问题事实上,该ID的CSS样式为overflow: hidden这是一个错误,还是我做错了什么?

我正在使用Selenium WebDriver版本:2.33.0.0,Firefox版本:22

测试和网站的来源是:https://github.com/tonyeung/selenium-overflow-issue

快速参考:下面的HTML是我的测试页面。对于那些不熟悉角度的人,只要你点击添加或编辑,它所做的就是将html片段显示为模态,你可以在这里看到一个现场演示: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 个答案:

答案 0 :(得分:1)

根据Selenium WebDriver源代码,元素不得以overflow: hidden作为样式。 (ref)(更新我刚刚意识到维护者已经更新了我链接到的ref中的代码,但原始的2.33代码确实包含了overflow: hidden检查。刚被重构为可能的2.34。)

所以,看起来除非维护人员对此做出决定,否则你就是SOL。但让维护人员注意到问题的第一步是向官方存储库添加一个问题,看起来你已经完成了。

在此期间,如果您无法让开发人员帮助您,可能会使用Javascript删除溢出属性:

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

并尝试从那里开始测试。