2013-07-12 16 views
6

EDIT: Myślę, że jest to kwestia otwarta na to już: http://code.google.com/p/selenium/issues/detail?id=5717Dlaczego sterownik Selenium Firefox uważa, że ​​mój modal nie jest wyświetlany, gdy rodzic ma przepełnienie: ukryty?

Więc w zasadzie używam sterownika Firefox i div z id="page-content" jest przyczyną mojego testu selenu się niepowodzeniem z powodu błędu wymienionego w wymienionej kwestii: "Element is not currently visible and so may not be interacted with" but another is? Byłem w stanie prześledzić problem do faktu, że ten identyfikator ma styl css z overflow: hidden Czy to błąd, czy robię coś nie tak?

używam wersji Selen WebDriver: 2.33.0.0, Firefox wersja: 22

Źródłem testu i strony internetowej jest tutaj: https://github.com/tonyeung/selenium-overflow-issue

Dla podręczne: HTML poniżej jest moja strona testowa . Dla tych z Was nie zna kątowe, wszystko jej sprawka wyświetla fragment HTML jako modalne po kliknięciu na dodać lub edytować, można zobaczyć na żywo demo tutaj: 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> 
+0

Zrobiłem trochę badań na ten temat za pomocą [this] (http://www.w3schools.com/cssref/playit.asp?filename=playcss_overflow&preval=hidden). I myślę, że dzieje się tak, że użycie 'overflow: hidden' dla modala powoduje tylko renderowanie tego, co zostało uchwycone w migawce modala. Poprosiłbym twoich front-endowych deweloperów, jeśli naprawdę potrzebuję "przepełnienia: ukrytego". – Brian

+0

Czy możemy również zobaczyć kod, którego używasz? Warto również spojrzeć na specyfikację WebDrivera, a konkretnie na część o [visibilty.] (Http://www.w3.org/TR/webdriver/#determining-visibility) – Arran

+0

Właściwie to również mnie budzi. Na przykład mapy Google lub inne mapy, wszystkie elementy mają "przepełnienie: ukryte", dla elementów na mapie, ChromeDriver działa dobrze, ale FirefoxDriver wyrzuca NotVisibleException. –

Odpowiedz

1

Według źródła selenu WebDriver kod, element nie może mieć stylu overflow: hidden. (ref) (UPDATE zdałem sobie sprawę, że opiekunowie są aktualizowane kod w odnośniku I powiązany, ale oryginalny kod 2.33 nie obejmują sprawdzanie overflow: hidden. Jego niedawno refactored do przypuszczalnej 2.34.)

Tak Wygląda na to, że dopóki opiekunowie nie zdecydują się na to, jesteś SOL. Ale pierwszym krokiem, aby opiekunowie zauważyli problem jest dodanie problemu do oficjalnego repozytorium, które wygląda tak, jak zrobiłeś.

Jednym z możliwych rozwiązań w międzyczasie, jeśli nie może Ci pomóc deweloperom jest użycie Javascript, aby usunąć atrybut overflow:

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

i spróbuj uruchomić swoje testy stamtąd.

+0

Nie pomyślałem o tym, dzięki, używam na razie sterownika chrome, nie wydaje mi się, aby miało to wpływ na mój czas wykonywania testów, ale wtedy mam tylko 10 przetestuj w tej chwili, kiedy osiągnę 100, zrobię porównanie prędkości dla różnych kierowców i dobrze o tym wiedzieć. –

Powiązane problemy