编辑:我认为已经有一个未解决的问题:http : //code.google.com/p/selenium/issues/detail?id=5717
因此,基本上我使用的是Firefox驱动程序,并且div与id="page- content"导致我的硒测试失败,并出现以下引用的问题中列出的错误:“元素当前不可见,因此可能无法与之交互”,但另一个是吗?我能够将问题归结为ID具有css样式的事实,这overflow: hidden是一个错误,还是我做错了什么?
id="page- content"
overflow: hidden
我正在使用Selenium WebDriver版本:2.33.0.0,Firefox版本:22
测试和网站的来源在这里:https : //github.com/tonyeung/selenium-overflow- issue
快速参考:下面的HTML是我的测试页。对于那些不熟悉angular的人,只要您单击添加或编辑,它的全部工作就是将html片段显示为模式,您可以在此处看到实时演示:http : //plnkr.co/edit/LzHqxAz0f2GurbL9BGyu?p=预习
<!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>
根据Selenium WebDriver源代码,元素不能具有overflow: hidden样式。(ref)( UPDATE 我刚刚意识到维护者已经更新了我链接到的ref中的代码,但是原始的2.33代码中确实包含了该overflow: hidden检查。只是将其重构为可能的2.34。)
因此,除非维护人员决定不这样做,否则您就是SOL。但是,要让维护人员注意问题的第一步是将Issue添加到官方存储库中,就像您已经完成的一样。
同时,如果您无法获得开发人员的帮助,一种可能的解决方案是使用Javascript删除溢出属性:
driver.executeScript("arguments[0].setAttribute('style', 'overflow: none;')", page_content_element)
并尝试从那里运行测试。