2
0

todomvc.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. module.exports = {
  2. 'todomvc': function (browser) {
  3. browser
  4. .url('http://localhost:8080/examples/todomvc/#test')
  5. .waitForElementVisible('.todoapp', 1000)
  6. .assert.notVisible('.main')
  7. .assert.notVisible('.footer')
  8. .assert.count('.filters .selected', 1)
  9. .assert.evaluate(function () {
  10. return document.querySelector('.filters .selected').textContent === 'All'
  11. })
  12. createNewItem('test')
  13. .assert.count('.todo', 1)
  14. .assert.notVisible('.todo .edit')
  15. .assert.containsText('.todo label', 'test')
  16. .assert.containsText('.todo-count strong', '1')
  17. .assert.checked('.todo .toggle', false)
  18. .assert.visible('.main')
  19. .assert.visible('.footer')
  20. .assert.notVisible('.clear-completed')
  21. .assert.value('.new-todo', '')
  22. createNewItem('test2')
  23. .assert.count('.todo', 2)
  24. .assert.containsText('.todo:nth-child(2) label', 'test2')
  25. .assert.containsText('.todo-count strong', '2')
  26. // toggle
  27. browser
  28. .click('.todo .toggle')
  29. .assert.count('.todo.completed', 1)
  30. .assert.cssClassPresent('.todo:nth-child(1)', 'completed')
  31. .assert.containsText('.todo-count strong', '1')
  32. .assert.visible('.clear-completed')
  33. createNewItem('test3')
  34. .assert.count('.todo', 3)
  35. .assert.containsText('.todo:nth-child(3) label', 'test3')
  36. .assert.containsText('.todo-count strong', '2')
  37. createNewItem('test4')
  38. createNewItem('test5')
  39. .assert.count('.todo', 5)
  40. .assert.containsText('.todo-count strong', '4')
  41. // toggle more
  42. browser
  43. .click('.todo:nth-child(4) .toggle')
  44. .click('.todo:nth-child(5) .toggle')
  45. .assert.count('.todo.completed', 3)
  46. .assert.containsText('.todo-count strong', '2')
  47. // remove
  48. removeItemAt(1)
  49. .assert.count('.todo', 4)
  50. .assert.count('.todo.completed', 2)
  51. .assert.containsText('.todo-count strong', '2')
  52. removeItemAt(2)
  53. .assert.count('.todo', 3)
  54. .assert.count('.todo.completed', 2)
  55. .assert.containsText('.todo-count strong', '1')
  56. // remove all
  57. browser
  58. .click('.clear-completed')
  59. .assert.count('.todo', 1)
  60. .assert.containsText('.todo label', 'test2')
  61. .assert.count('.todo.completed', 0)
  62. .assert.containsText('.todo-count strong', '1')
  63. .assert.notVisible('.clear-completed')
  64. // prepare to test filters
  65. createNewItem('test')
  66. createNewItem('test')
  67. .click('.todo:nth-child(2) .toggle')
  68. .click('.todo:nth-child(3) .toggle')
  69. // active filter
  70. browser
  71. .click('.filters li:nth-child(2) a')
  72. .assert.count('.todo', 1)
  73. .assert.count('.todo.completed', 0)
  74. // add item with filter active
  75. createNewItem('test')
  76. .assert.count('.todo', 2)
  77. // complted filter
  78. browser.click('.filters li:nth-child(3) a')
  79. .assert.count('.todo', 2)
  80. .assert.count('.todo.completed', 2)
  81. // filter on page load
  82. browser.url('http://localhost:8080/examples/todomvc/#active')
  83. .assert.count('.todo', 2)
  84. .assert.count('.todo.completed', 0)
  85. .assert.containsText('.todo-count strong', '2')
  86. // completed on page load
  87. browser.url('http://localhost:8080/examples/todomvc/#completed')
  88. .assert.count('.todo', 2)
  89. .assert.count('.todo.completed', 2)
  90. .assert.containsText('.todo-count strong', '2')
  91. // toggling with filter active
  92. browser
  93. .click('.todo .toggle')
  94. .assert.count('.todo', 1)
  95. .click('.filters li:nth-child(2) a')
  96. .assert.count('.todo', 3)
  97. .click('.todo .toggle')
  98. .assert.count('.todo', 2)
  99. // editing triggered by blur
  100. browser
  101. .click('.filters li:nth-child(1) a')
  102. .dblClick('.todo:nth-child(1) label')
  103. .assert.count('.todo.editing', 1)
  104. .assert.focused('.todo:nth-child(1) .edit')
  105. .clearValue('.todo:nth-child(1) .edit')
  106. .setValue('.todo:nth-child(1) .edit', 'edited!')
  107. .click('footer') // blur
  108. .assert.count('.todo.editing', 0)
  109. .assert.containsText('.todo:nth-child(1) label', 'edited!')
  110. // editing triggered by enter
  111. browser
  112. .dblClick('.todo label')
  113. enter('.todo:nth-child(1) .edit', 'edited again!')
  114. .assert.count('.todo.editing', 0)
  115. .assert.containsText('.todo:nth-child(1) label', 'edited again!')
  116. // cancel
  117. browser
  118. .dblClick('.todo label')
  119. .clearValue('.todo:nth-child(1) .edit')
  120. .setValue('.todo:nth-child(1) .edit', 'edited!')
  121. triggerKeyup('.todo:nth-child(1) .edit', 27)
  122. .assert.count('.todo.editing', 0)
  123. .assert.containsText('.todo:nth-child(1) label', 'edited again!')
  124. // empty value should remove
  125. browser
  126. .dblClick('.todo label')
  127. enter('.todo:nth-child(1) .edit', ' ')
  128. .assert.count('.todo', 3)
  129. // toggle all
  130. browser
  131. .click('.toggle-all')
  132. .assert.count('.todo.completed', 3)
  133. .click('.toggle-all')
  134. .assert.count('.todo:not(.completed)', 3)
  135. .end()
  136. function createNewItem (text) {
  137. return enter('.new-todo', text)
  138. }
  139. function enter (selector, text) {
  140. browser
  141. .clearValue(selector)
  142. .setValue(selector, text)
  143. return triggerKeyup(selector, 13)
  144. }
  145. function triggerKeyup (selector, code) {
  146. return browser.execute(function (selector, code) {
  147. var e = document.createEvent('HTMLEvents')
  148. e.initEvent('keyup', true, true)
  149. e.keyCode = code
  150. document.querySelector(selector).dispatchEvent(e)
  151. }, [selector, code])
  152. }
  153. function removeItemAt (n) {
  154. return browser
  155. .moveToElement('.todo:nth-child(' + n + ')', 10, 10)
  156. .click('.todo:nth-child(' + n + ') .destroy')
  157. }
  158. }
  159. }