1+ describe ( 'sortable tabarray' , function ( ) {
2+ function checkDragDrop ( i ) {
3+ browser . driver . wait ( protractor . until . elementLocated ( by . xpath ( "//ol/li[1]/a[text()='My name is: Name " + ( i + 1 ) + "']" ) ) , 10000 ) ;
4+ expect ( element . all ( by . css ( '.nav-tabs li a' ) ) . get ( 0 ) . getText ( ) ) . toBe ( 'My name is: Name ' + ( i + 1 ) ) ;
5+ }
6+
7+ function populateTab ( i ) {
8+ browser . driver . wait ( protractor . until . elementLocated ( by . css ( '.tab-pane.active.index' + i ) ) , 5000 ) ;
9+
10+ browser . driver . wait ( protractor . until . elementLocated ( by . css ( '.tab-pane.index' + i + ' div.nickField > input' ) ) , 5000 ) ;
11+ input = element . all ( by . css ( '.tab-pane.index' + i + ' div.nickField > input' ) ) . first ( ) ;
12+ input . sendKeys ( 'Nickname ' + i ) ;
13+
14+ browser . driver . wait ( protractor . until . elementLocated ( by . css ( '.tab-pane.index' + i + ' div.nameField > input' ) ) , 5000 ) ;
15+ input = element . all ( by . css ( '.tab-pane.index' + i + ' div.nameField > input' ) ) . first ( ) ;
16+ input . sendKeys ( 'Name ' + i ) ;
17+
18+ browser . driver . wait ( protractor . until . elementLocated ( by . linkText ( 'My name is: Name ' + i ) ) , 10000 ) ;
19+ }
20+
21+ it ( 'form should exist' , function ( ) {
22+ browser . get ( 'http://localhost:8080/examples/sortable-tabarray.html' ) ;
23+
24+ expect ( element ( by . css ( 'form' ) ) . getInnerHtml ( ) ) . not . toEqual ( '' ) ;
25+ } ) ;
26+
27+ it ( 'should be able order elements in array by dragging the tabs' , function ( ) {
28+ browser . get ( 'http://localhost:8080/examples/sortable-tabarray.html' ) ;
29+
30+ var i ;
31+ var elementsToAdd = 9 ;
32+
33+ /* the array starts with 1 element, populate the first element */
34+ populateTab ( 0 ) ;
35+
36+ /* add elements and populate */
37+ for ( i = 1 ; i <= elementsToAdd ; i ++ ) {
38+ var tabLink = element . all ( by . css ( '.glyphicon-plus' ) ) ;
39+ tabLink . click ( ) . then ( populateTab ( i ) ) ;
40+ }
41+
42+ /* continue when all tabs have been populated*/
43+ browser . driver . wait ( protractor . until . elementLocated ( by . linkText ( 'My name is: Name ' + elementsToAdd ) ) , 10000 ) ;
44+
45+ /* check the number of tabs */
46+ var tabs = element . all ( by . css ( '.nav-tabs li' ) ) ;
47+ expect ( tabs . count ( ) ) . toBe ( elementsToAdd + 2 ) ; //Extra 1 for the "+ Add" link
48+
49+ /* drag the tabs into reverse order (descending) */
50+ for ( i = 0 ; i < elementsToAdd ; i ++ ) {
51+ var draggable_element = element . all ( by . css ( '.nav-tabs li' ) ) . get ( 0 ) ;
52+ var target_element = element . all ( by . css ( '.nav-tabs li' ) ) . get ( elementsToAdd - i ) ;
53+ expect ( draggable_element . isPresent ( ) ) . toEqual ( true ) ;
54+ expect ( target_element . isPresent ( ) ) . toEqual ( true ) ;
55+ browser . actions ( ) . dragAndDrop ( draggable_element , target_element ) . perform ( ) . then ( checkDragDrop ( i ) ) ;
56+ }
57+
58+ /* final check of the reverse ordered tabs */
59+ for ( i = 0 ; i <= elementsToAdd ; i ++ ) {
60+ expect ( element . all ( by . css ( '.nav-tabs li a' ) ) . get ( i ) . getText ( ) ) . toBe ( 'My name is: Name ' + ( elementsToAdd - i ) ) ;
61+ }
62+ } ) ;
63+ } ) ;
0 commit comments