@oracle/oraclejet-webdriver 10.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -0
  3. package/bin/generate +509 -0
  4. package/bin/generate-jet +163 -0
  5. package/bin/templates/baseclass.ts-template +13 -0
  6. package/bin/templates/class.ts-template +12 -0
  7. package/bin/templates/element-test.spec.ts-template +28 -0
  8. package/bin/templates/index.ts-template +27 -0
  9. package/bin/templates/jetcomponents.json +71 -0
  10. package/bin/templates/package.json-template +15 -0
  11. package/bin/templates/tsconfig.json-template +19 -0
  12. package/elements/OjWebElement.js +233 -0
  13. package/elements/OjWebElement.js.map +1 -0
  14. package/elements/OjWebElement.ts +675 -0
  15. package/elements/index.js +214 -0
  16. package/elements/index.js.map +1 -0
  17. package/elements/index.ts +75 -0
  18. package/elements/oj-accordion/OjAccordion.js +8 -0
  19. package/elements/oj-accordion/OjAccordion.js.map +1 -0
  20. package/elements/oj-accordion/OjAccordion.ts +12 -0
  21. package/elements/oj-accordion/OjAccordionBase.js +20 -0
  22. package/elements/oj-accordion/OjAccordionBase.js.map +1 -0
  23. package/elements/oj-accordion/OjAccordionBase.ts +48 -0
  24. package/elements/oj-accordion/index.js +17 -0
  25. package/elements/oj-accordion/index.js.map +1 -0
  26. package/elements/oj-accordion/index.ts +27 -0
  27. package/elements/oj-button/OjButton.js +20 -0
  28. package/elements/oj-button/OjButton.js.map +1 -0
  29. package/elements/oj-button/OjButton.ts +35 -0
  30. package/elements/oj-button/OjButtonBase.js +23 -0
  31. package/elements/oj-button/OjButtonBase.js.map +1 -0
  32. package/elements/oj-button/OjButtonBase.ts +57 -0
  33. package/elements/oj-button/index.js +17 -0
  34. package/elements/oj-button/index.js.map +1 -0
  35. package/elements/oj-button/index.ts +27 -0
  36. package/elements/oj-buttonset-many/OjButtonsetMany.js +8 -0
  37. package/elements/oj-buttonset-many/OjButtonsetMany.js.map +1 -0
  38. package/elements/oj-buttonset-many/OjButtonsetMany.ts +11 -0
  39. package/elements/oj-buttonset-many/OjButtonsetManyBase.js +35 -0
  40. package/elements/oj-buttonset-many/OjButtonsetManyBase.js.map +1 -0
  41. package/elements/oj-buttonset-many/OjButtonsetManyBase.ts +93 -0
  42. package/elements/oj-buttonset-many/index.js +17 -0
  43. package/elements/oj-buttonset-many/index.js.map +1 -0
  44. package/elements/oj-buttonset-many/index.ts +27 -0
  45. package/elements/oj-buttonset-one/OjButtonsetOne.js +8 -0
  46. package/elements/oj-buttonset-one/OjButtonsetOne.js.map +1 -0
  47. package/elements/oj-buttonset-one/OjButtonsetOne.ts +11 -0
  48. package/elements/oj-buttonset-one/OjButtonsetOneBase.js +35 -0
  49. package/elements/oj-buttonset-one/OjButtonsetOneBase.js.map +1 -0
  50. package/elements/oj-buttonset-one/OjButtonsetOneBase.ts +93 -0
  51. package/elements/oj-buttonset-one/index.js +17 -0
  52. package/elements/oj-buttonset-one/index.js.map +1 -0
  53. package/elements/oj-buttonset-one/index.ts +27 -0
  54. package/elements/oj-chart/OjChart.js +8 -0
  55. package/elements/oj-chart/OjChart.js.map +1 -0
  56. package/elements/oj-chart/OjChart.ts +12 -0
  57. package/elements/oj-chart/OjChartBase.js +170 -0
  58. package/elements/oj-chart/OjChartBase.js.map +1 -0
  59. package/elements/oj-chart/OjChartBase.ts +2468 -0
  60. package/elements/oj-chart/index.js +17 -0
  61. package/elements/oj-chart/index.js.map +1 -0
  62. package/elements/oj-chart/index.ts +27 -0
  63. package/elements/oj-checkboxset/OjCheckboxset.js +39 -0
  64. package/elements/oj-checkboxset/OjCheckboxset.js.map +1 -0
  65. package/elements/oj-checkboxset/OjCheckboxset.ts +74 -0
  66. package/elements/oj-checkboxset/OjCheckboxsetBase.js +68 -0
  67. package/elements/oj-checkboxset/OjCheckboxsetBase.js.map +1 -0
  68. package/elements/oj-checkboxset/OjCheckboxsetBase.ts +262 -0
  69. package/elements/oj-checkboxset/index.js +17 -0
  70. package/elements/oj-checkboxset/index.js.map +1 -0
  71. package/elements/oj-checkboxset/index.ts +27 -0
  72. package/elements/oj-collapsible/OjCollapsible.js +23 -0
  73. package/elements/oj-collapsible/OjCollapsible.js.map +1 -0
  74. package/elements/oj-collapsible/OjCollapsible.ts +36 -0
  75. package/elements/oj-collapsible/OjCollapsibleBase.js +23 -0
  76. package/elements/oj-collapsible/OjCollapsibleBase.js.map +1 -0
  77. package/elements/oj-collapsible/OjCollapsibleBase.ts +57 -0
  78. package/elements/oj-collapsible/index.js +17 -0
  79. package/elements/oj-collapsible/index.js.map +1 -0
  80. package/elements/oj-collapsible/index.ts +27 -0
  81. package/elements/oj-color-palette/OjColorPalette.js +8 -0
  82. package/elements/oj-color-palette/OjColorPalette.js.map +1 -0
  83. package/elements/oj-color-palette/OjColorPalette.ts +12 -0
  84. package/elements/oj-color-palette/OjColorPaletteBase.js +65 -0
  85. package/elements/oj-color-palette/OjColorPaletteBase.js.map +1 -0
  86. package/elements/oj-color-palette/OjColorPaletteBase.ts +235 -0
  87. package/elements/oj-color-palette/index.js +17 -0
  88. package/elements/oj-color-palette/index.js.map +1 -0
  89. package/elements/oj-color-palette/index.ts +27 -0
  90. package/elements/oj-color-spectrum/OjColorSpectrum.js +8 -0
  91. package/elements/oj-color-spectrum/OjColorSpectrum.js.map +1 -0
  92. package/elements/oj-color-spectrum/OjColorSpectrum.ts +12 -0
  93. package/elements/oj-color-spectrum/OjColorSpectrumBase.js +56 -0
  94. package/elements/oj-color-spectrum/OjColorSpectrumBase.js.map +1 -0
  95. package/elements/oj-color-spectrum/OjColorSpectrumBase.ts +210 -0
  96. package/elements/oj-color-spectrum/index.js +17 -0
  97. package/elements/oj-color-spectrum/index.js.map +1 -0
  98. package/elements/oj-color-spectrum/index.ts +27 -0
  99. package/elements/oj-combobox-many/OjComboboxMany.js +51 -0
  100. package/elements/oj-combobox-many/OjComboboxMany.js.map +1 -0
  101. package/elements/oj-combobox-many/OjComboboxMany.ts +80 -0
  102. package/elements/oj-combobox-many/OjComboboxManyBase.js +98 -0
  103. package/elements/oj-combobox-many/OjComboboxManyBase.js.map +1 -0
  104. package/elements/oj-combobox-many/OjComboboxManyBase.ts +428 -0
  105. package/elements/oj-combobox-many/index.js +17 -0
  106. package/elements/oj-combobox-many/index.js.map +1 -0
  107. package/elements/oj-combobox-many/index.ts +27 -0
  108. package/elements/oj-combobox-one/OjComboboxOne.js +49 -0
  109. package/elements/oj-combobox-one/OjComboboxOne.js.map +1 -0
  110. package/elements/oj-combobox-one/OjComboboxOne.ts +74 -0
  111. package/elements/oj-combobox-one/OjComboboxOneBase.js +101 -0
  112. package/elements/oj-combobox-one/OjComboboxOneBase.js.map +1 -0
  113. package/elements/oj-combobox-one/OjComboboxOneBase.ts +437 -0
  114. package/elements/oj-combobox-one/index.js +17 -0
  115. package/elements/oj-combobox-one/index.js.map +1 -0
  116. package/elements/oj-combobox-one/index.ts +27 -0
  117. package/elements/oj-conveyor-belt/OjConveyorBelt.js +16 -0
  118. package/elements/oj-conveyor-belt/OjConveyorBelt.js.map +1 -0
  119. package/elements/oj-conveyor-belt/OjConveyorBelt.ts +30 -0
  120. package/elements/oj-conveyor-belt/OjConveyorBeltBase.js +29 -0
  121. package/elements/oj-conveyor-belt/OjConveyorBeltBase.js.map +1 -0
  122. package/elements/oj-conveyor-belt/OjConveyorBeltBase.ts +87 -0
  123. package/elements/oj-conveyor-belt/index.js +17 -0
  124. package/elements/oj-conveyor-belt/index.js.map +1 -0
  125. package/elements/oj-conveyor-belt/index.ts +27 -0
  126. package/elements/oj-data-grid/OjDataGrid.js +198 -0
  127. package/elements/oj-data-grid/OjDataGrid.js.map +1 -0
  128. package/elements/oj-data-grid/OjDataGrid.ts +279 -0
  129. package/elements/oj-data-grid/OjDataGridBase.js +65 -0
  130. package/elements/oj-data-grid/OjDataGridBase.js.map +1 -0
  131. package/elements/oj-data-grid/OjDataGridBase.ts +705 -0
  132. package/elements/oj-data-grid/index.js +17 -0
  133. package/elements/oj-data-grid/index.js.map +1 -0
  134. package/elements/oj-data-grid/index.ts +27 -0
  135. package/elements/oj-date-picker/OjDatePicker.js +8 -0
  136. package/elements/oj-date-picker/OjDatePicker.js.map +1 -0
  137. package/elements/oj-date-picker/OjDatePicker.ts +12 -0
  138. package/elements/oj-date-picker/OjDatePickerBase.js +104 -0
  139. package/elements/oj-date-picker/OjDatePickerBase.js.map +1 -0
  140. package/elements/oj-date-picker/OjDatePickerBase.ts +536 -0
  141. package/elements/oj-date-picker/index.js +17 -0
  142. package/elements/oj-date-picker/index.js.map +1 -0
  143. package/elements/oj-date-picker/index.ts +27 -0
  144. package/elements/oj-date-time-picker/OjDateTimePicker.js +8 -0
  145. package/elements/oj-date-time-picker/OjDateTimePicker.js.map +1 -0
  146. package/elements/oj-date-time-picker/OjDateTimePicker.ts +32 -0
  147. package/elements/oj-date-time-picker/OjDateTimePickerBase.js +107 -0
  148. package/elements/oj-date-time-picker/OjDateTimePickerBase.js.map +1 -0
  149. package/elements/oj-date-time-picker/OjDateTimePickerBase.ts +567 -0
  150. package/elements/oj-date-time-picker/index.js +17 -0
  151. package/elements/oj-date-time-picker/index.js.map +1 -0
  152. package/elements/oj-date-time-picker/index.ts +27 -0
  153. package/elements/oj-diagram/OjDiagram.js +8 -0
  154. package/elements/oj-diagram/OjDiagram.js.map +1 -0
  155. package/elements/oj-diagram/OjDiagram.ts +12 -0
  156. package/elements/oj-diagram/OjDiagramBase.js +128 -0
  157. package/elements/oj-diagram/OjDiagramBase.js.map +1 -0
  158. package/elements/oj-diagram/OjDiagramBase.ts +740 -0
  159. package/elements/oj-diagram/index.js +17 -0
  160. package/elements/oj-diagram/index.js.map +1 -0
  161. package/elements/oj-diagram/index.ts +27 -0
  162. package/elements/oj-dialog/OjDialog.js +13 -0
  163. package/elements/oj-dialog/OjDialog.js.map +1 -0
  164. package/elements/oj-dialog/OjDialog.ts +21 -0
  165. package/elements/oj-dialog/OjDialogBase.js +32 -0
  166. package/elements/oj-dialog/OjDialogBase.js.map +1 -0
  167. package/elements/oj-dialog/OjDialogBase.ts +144 -0
  168. package/elements/oj-dialog/index.js +17 -0
  169. package/elements/oj-dialog/index.js.map +1 -0
  170. package/elements/oj-dialog/index.ts +27 -0
  171. package/elements/oj-file-picker/OjFilePicker.js +35 -0
  172. package/elements/oj-file-picker/OjFilePicker.js.map +1 -0
  173. package/elements/oj-file-picker/OjFilePicker.ts +46 -0
  174. package/elements/oj-file-picker/OjFilePickerBase.js +29 -0
  175. package/elements/oj-file-picker/OjFilePickerBase.js.map +1 -0
  176. package/elements/oj-file-picker/OjFilePickerBase.ts +75 -0
  177. package/elements/oj-file-picker/index.js +17 -0
  178. package/elements/oj-file-picker/index.js.map +1 -0
  179. package/elements/oj-file-picker/index.ts +27 -0
  180. package/elements/oj-film-strip/OjFilmStrip.js +8 -0
  181. package/elements/oj-film-strip/OjFilmStrip.js.map +1 -0
  182. package/elements/oj-film-strip/OjFilmStrip.ts +12 -0
  183. package/elements/oj-film-strip/OjFilmStripBase.js +32 -0
  184. package/elements/oj-film-strip/OjFilmStripBase.js.map +1 -0
  185. package/elements/oj-film-strip/OjFilmStripBase.ts +118 -0
  186. package/elements/oj-film-strip/index.js +17 -0
  187. package/elements/oj-film-strip/index.js.map +1 -0
  188. package/elements/oj-film-strip/index.ts +27 -0
  189. package/elements/oj-gantt/OjGantt.js +8 -0
  190. package/elements/oj-gantt/OjGantt.js.map +1 -0
  191. package/elements/oj-gantt/OjGantt.ts +12 -0
  192. package/elements/oj-gantt/OjGanttBase.js +98 -0
  193. package/elements/oj-gantt/OjGanttBase.js.map +1 -0
  194. package/elements/oj-gantt/OjGanttBase.ts +996 -0
  195. package/elements/oj-gantt/index.js +17 -0
  196. package/elements/oj-gantt/index.js.map +1 -0
  197. package/elements/oj-gantt/index.ts +27 -0
  198. package/elements/oj-indexer/OjIndexer.js +8 -0
  199. package/elements/oj-indexer/OjIndexer.js.map +1 -0
  200. package/elements/oj-indexer/OjIndexer.ts +12 -0
  201. package/elements/oj-indexer/OjIndexerBase.js +14 -0
  202. package/elements/oj-indexer/OjIndexerBase.js.map +1 -0
  203. package/elements/oj-indexer/OjIndexerBase.ts +62 -0
  204. package/elements/oj-indexer/index.js +17 -0
  205. package/elements/oj-indexer/index.js.map +1 -0
  206. package/elements/oj-indexer/index.ts +27 -0
  207. package/elements/oj-input-date/OjInputDate.js +10 -0
  208. package/elements/oj-input-date/OjInputDate.js.map +1 -0
  209. package/elements/oj-input-date/OjInputDate.ts +14 -0
  210. package/elements/oj-input-date/OjInputDateBase.js +107 -0
  211. package/elements/oj-input-date/OjInputDateBase.js.map +1 -0
  212. package/elements/oj-input-date/OjInputDateBase.ts +545 -0
  213. package/elements/oj-input-date/index.js +17 -0
  214. package/elements/oj-input-date/index.js.map +1 -0
  215. package/elements/oj-input-date/index.ts +27 -0
  216. package/elements/oj-input-date-time/OjInputDateTime.js +10 -0
  217. package/elements/oj-input-date-time/OjInputDateTime.js.map +1 -0
  218. package/elements/oj-input-date-time/OjInputDateTime.ts +14 -0
  219. package/elements/oj-input-date-time/OjInputDateTimeBase.js +110 -0
  220. package/elements/oj-input-date-time/OjInputDateTimeBase.js.map +1 -0
  221. package/elements/oj-input-date-time/OjInputDateTimeBase.ts +576 -0
  222. package/elements/oj-input-date-time/index.js +17 -0
  223. package/elements/oj-input-date-time/index.js.map +1 -0
  224. package/elements/oj-input-date-time/index.ts +27 -0
  225. package/elements/oj-input-number/OjInputNumber.js +10 -0
  226. package/elements/oj-input-number/OjInputNumber.js.map +1 -0
  227. package/elements/oj-input-number/OjInputNumber.ts +14 -0
  228. package/elements/oj-input-number/OjInputNumberBase.js +98 -0
  229. package/elements/oj-input-number/OjInputNumberBase.js.map +1 -0
  230. package/elements/oj-input-number/OjInputNumberBase.ts +406 -0
  231. package/elements/oj-input-number/index.js +17 -0
  232. package/elements/oj-input-number/index.js.map +1 -0
  233. package/elements/oj-input-number/index.ts +27 -0
  234. package/elements/oj-input-password/OjInputPassword.js +10 -0
  235. package/elements/oj-input-password/OjInputPassword.js.map +1 -0
  236. package/elements/oj-input-password/OjInputPassword.ts +14 -0
  237. package/elements/oj-input-password/OjInputPasswordBase.js +83 -0
  238. package/elements/oj-input-password/OjInputPasswordBase.js.map +1 -0
  239. package/elements/oj-input-password/OjInputPasswordBase.ts +323 -0
  240. package/elements/oj-input-password/index.js +17 -0
  241. package/elements/oj-input-password/index.js.map +1 -0
  242. package/elements/oj-input-password/index.ts +27 -0
  243. package/elements/oj-input-search/OjInputSearch.js +41 -0
  244. package/elements/oj-input-search/OjInputSearch.js.map +1 -0
  245. package/elements/oj-input-search/OjInputSearch.ts +64 -0
  246. package/elements/oj-input-search/OjInputSearchBase.js +26 -0
  247. package/elements/oj-input-search/OjInputSearchBase.js.map +1 -0
  248. package/elements/oj-input-search/OjInputSearchBase.ts +66 -0
  249. package/elements/oj-input-search/index.js +17 -0
  250. package/elements/oj-input-search/index.js.map +1 -0
  251. package/elements/oj-input-search/index.ts +27 -0
  252. package/elements/oj-input-text/OjInputText.js +10 -0
  253. package/elements/oj-input-text/OjInputText.js.map +1 -0
  254. package/elements/oj-input-text/OjInputText.ts +15 -0
  255. package/elements/oj-input-text/OjInputTextBase.js +95 -0
  256. package/elements/oj-input-text/OjInputTextBase.js.map +1 -0
  257. package/elements/oj-input-text/OjInputTextBase.ts +361 -0
  258. package/elements/oj-input-text/index.js +17 -0
  259. package/elements/oj-input-text/index.js.map +1 -0
  260. package/elements/oj-input-text/index.ts +27 -0
  261. package/elements/oj-input-time/OjInputTime.js +10 -0
  262. package/elements/oj-input-time/OjInputTime.js.map +1 -0
  263. package/elements/oj-input-time/OjInputTime.ts +14 -0
  264. package/elements/oj-input-time/OjInputTimeBase.js +101 -0
  265. package/elements/oj-input-time/OjInputTimeBase.js.map +1 -0
  266. package/elements/oj-input-time/OjInputTimeBase.ts +477 -0
  267. package/elements/oj-input-time/index.js +17 -0
  268. package/elements/oj-input-time/index.js.map +1 -0
  269. package/elements/oj-input-time/index.ts +27 -0
  270. package/elements/oj-label/OjLabel.js +8 -0
  271. package/elements/oj-label/OjLabel.js.map +1 -0
  272. package/elements/oj-label/OjLabel.ts +12 -0
  273. package/elements/oj-label/OjLabelBase.js +23 -0
  274. package/elements/oj-label/OjLabelBase.js.map +1 -0
  275. package/elements/oj-label/OjLabelBase.ts +79 -0
  276. package/elements/oj-label/index.js +17 -0
  277. package/elements/oj-label/index.js.map +1 -0
  278. package/elements/oj-label/index.ts +27 -0
  279. package/elements/oj-led-gauge/OjLedGauge.js +8 -0
  280. package/elements/oj-led-gauge/OjLedGauge.js.map +1 -0
  281. package/elements/oj-led-gauge/OjLedGauge.ts +12 -0
  282. package/elements/oj-led-gauge/OjLedGaugeBase.js +62 -0
  283. package/elements/oj-led-gauge/OjLedGaugeBase.js.map +1 -0
  284. package/elements/oj-led-gauge/OjLedGaugeBase.ts +302 -0
  285. package/elements/oj-led-gauge/index.js +17 -0
  286. package/elements/oj-led-gauge/index.js.map +1 -0
  287. package/elements/oj-led-gauge/index.ts +27 -0
  288. package/elements/oj-legend/OjLegend.js +8 -0
  289. package/elements/oj-legend/OjLegend.js.map +1 -0
  290. package/elements/oj-legend/OjLegend.ts +12 -0
  291. package/elements/oj-legend/OjLegendBase.js +74 -0
  292. package/elements/oj-legend/OjLegendBase.js.map +1 -0
  293. package/elements/oj-legend/OjLegendBase.ts +324 -0
  294. package/elements/oj-legend/index.js +17 -0
  295. package/elements/oj-legend/index.js.map +1 -0
  296. package/elements/oj-legend/index.ts +27 -0
  297. package/elements/oj-list-view/OjListView.js +25 -0
  298. package/elements/oj-list-view/OjListView.js.map +1 -0
  299. package/elements/oj-list-view/OjListView.ts +36 -0
  300. package/elements/oj-list-view/OjListViewBase.js +71 -0
  301. package/elements/oj-list-view/OjListViewBase.js.map +1 -0
  302. package/elements/oj-list-view/OjListViewBase.ts +355 -0
  303. package/elements/oj-list-view/index.js +17 -0
  304. package/elements/oj-list-view/index.js.map +1 -0
  305. package/elements/oj-list-view/index.ts +27 -0
  306. package/elements/oj-masonry-layout/OjMasonryLayout.js +8 -0
  307. package/elements/oj-masonry-layout/OjMasonryLayout.js.map +1 -0
  308. package/elements/oj-masonry-layout/OjMasonryLayout.ts +12 -0
  309. package/elements/oj-masonry-layout/OjMasonryLayoutBase.js +14 -0
  310. package/elements/oj-masonry-layout/OjMasonryLayoutBase.js.map +1 -0
  311. package/elements/oj-masonry-layout/OjMasonryLayoutBase.ts +46 -0
  312. package/elements/oj-masonry-layout/index.js +17 -0
  313. package/elements/oj-masonry-layout/index.js.map +1 -0
  314. package/elements/oj-masonry-layout/index.ts +27 -0
  315. package/elements/oj-menu/OjMenu.js +28 -0
  316. package/elements/oj-menu/OjMenu.js.map +1 -0
  317. package/elements/oj-menu/OjMenu.ts +42 -0
  318. package/elements/oj-menu/OjMenuBase.js +17 -0
  319. package/elements/oj-menu/OjMenuBase.js.map +1 -0
  320. package/elements/oj-menu/OjMenuBase.ts +121 -0
  321. package/elements/oj-menu/index.js +17 -0
  322. package/elements/oj-menu/index.js.map +1 -0
  323. package/elements/oj-menu/index.ts +27 -0
  324. package/elements/oj-menu-button/OjMenuButton.js +14 -0
  325. package/elements/oj-menu-button/OjMenuButton.js.map +1 -0
  326. package/elements/oj-menu-button/OjMenuButton.ts +20 -0
  327. package/elements/oj-menu-button/OjMenuButtonBase.js +20 -0
  328. package/elements/oj-menu-button/OjMenuButtonBase.js.map +1 -0
  329. package/elements/oj-menu-button/OjMenuButtonBase.ts +48 -0
  330. package/elements/oj-menu-button/index.js +17 -0
  331. package/elements/oj-menu-button/index.js.map +1 -0
  332. package/elements/oj-menu-button/index.ts +27 -0
  333. package/elements/oj-message/OjMessage.js +13 -0
  334. package/elements/oj-message/OjMessage.js.map +1 -0
  335. package/elements/oj-message/OjMessage.ts +19 -0
  336. package/elements/oj-message/OjMessageBase.js +17 -0
  337. package/elements/oj-message/OjMessageBase.js.map +1 -0
  338. package/elements/oj-message/OjMessageBase.ts +113 -0
  339. package/elements/oj-message/index.js +17 -0
  340. package/elements/oj-message/index.js.map +1 -0
  341. package/elements/oj-message/index.ts +27 -0
  342. package/elements/oj-n-box/OjNBox.js +8 -0
  343. package/elements/oj-n-box/OjNBox.js.map +1 -0
  344. package/elements/oj-n-box/OjNBox.ts +12 -0
  345. package/elements/oj-n-box/OjNBoxBase.js +116 -0
  346. package/elements/oj-n-box/OjNBoxBase.js.map +1 -0
  347. package/elements/oj-n-box/OjNBoxBase.ts +880 -0
  348. package/elements/oj-n-box/index.js +17 -0
  349. package/elements/oj-n-box/index.js.map +1 -0
  350. package/elements/oj-n-box/index.ts +27 -0
  351. package/elements/oj-navigation-list/OjNavigationList.js +186 -0
  352. package/elements/oj-navigation-list/OjNavigationList.js.map +1 -0
  353. package/elements/oj-navigation-list/OjNavigationList.ts +250 -0
  354. package/elements/oj-navigation-list/OjNavigationListBase.js +50 -0
  355. package/elements/oj-navigation-list/OjNavigationListBase.js.map +1 -0
  356. package/elements/oj-navigation-list/OjNavigationListBase.ts +164 -0
  357. package/elements/oj-navigation-list/index.js +17 -0
  358. package/elements/oj-navigation-list/index.js.map +1 -0
  359. package/elements/oj-navigation-list/index.ts +27 -0
  360. package/elements/oj-paging-control/OjPagingControl.js +13 -0
  361. package/elements/oj-paging-control/OjPagingControl.js.map +1 -0
  362. package/elements/oj-paging-control/OjPagingControl.ts +26 -0
  363. package/elements/oj-paging-control/OjPagingControlBase.js +29 -0
  364. package/elements/oj-paging-control/OjPagingControlBase.js.map +1 -0
  365. package/elements/oj-paging-control/OjPagingControlBase.ts +235 -0
  366. package/elements/oj-paging-control/index.js +17 -0
  367. package/elements/oj-paging-control/index.js.map +1 -0
  368. package/elements/oj-paging-control/index.ts +27 -0
  369. package/elements/oj-picto-chart/OjPictoChart.js +8 -0
  370. package/elements/oj-picto-chart/OjPictoChart.js.map +1 -0
  371. package/elements/oj-picto-chart/OjPictoChart.ts +12 -0
  372. package/elements/oj-picto-chart/OjPictoChartBase.js +86 -0
  373. package/elements/oj-picto-chart/OjPictoChartBase.js.map +1 -0
  374. package/elements/oj-picto-chart/OjPictoChartBase.ts +394 -0
  375. package/elements/oj-picto-chart/index.js +17 -0
  376. package/elements/oj-picto-chart/index.js.map +1 -0
  377. package/elements/oj-picto-chart/index.ts +27 -0
  378. package/elements/oj-popup/OjPopup.js +8 -0
  379. package/elements/oj-popup/OjPopup.js.map +1 -0
  380. package/elements/oj-popup/OjPopup.ts +11 -0
  381. package/elements/oj-popup/OjPopupBase.js +29 -0
  382. package/elements/oj-popup/OjPopupBase.js.map +1 -0
  383. package/elements/oj-popup/OjPopupBase.ts +155 -0
  384. package/elements/oj-popup/index.js +17 -0
  385. package/elements/oj-popup/index.js.map +1 -0
  386. package/elements/oj-popup/index.ts +27 -0
  387. package/elements/oj-progress/OjProgress.js +8 -0
  388. package/elements/oj-progress/OjProgress.js.map +1 -0
  389. package/elements/oj-progress/OjProgress.ts +12 -0
  390. package/elements/oj-progress/OjProgressBase.js +23 -0
  391. package/elements/oj-progress/OjProgressBase.js.map +1 -0
  392. package/elements/oj-progress/OjProgressBase.ts +65 -0
  393. package/elements/oj-progress/index.js +17 -0
  394. package/elements/oj-progress/index.js.map +1 -0
  395. package/elements/oj-progress/index.ts +27 -0
  396. package/elements/oj-progress-list/OjProgressList.js +8 -0
  397. package/elements/oj-progress-list/OjProgressList.js.map +1 -0
  398. package/elements/oj-progress-list/OjProgressList.ts +12 -0
  399. package/elements/oj-progress-list/OjProgressListBase.js +11 -0
  400. package/elements/oj-progress-list/OjProgressListBase.js.map +1 -0
  401. package/elements/oj-progress-list/OjProgressListBase.ts +21 -0
  402. package/elements/oj-progress-list/index.js +17 -0
  403. package/elements/oj-progress-list/index.js.map +1 -0
  404. package/elements/oj-progress-list/index.ts +27 -0
  405. package/elements/oj-radioset/OjRadioset.js +32 -0
  406. package/elements/oj-radioset/OjRadioset.js.map +1 -0
  407. package/elements/oj-radioset/OjRadioset.ts +63 -0
  408. package/elements/oj-radioset/OjRadiosetBase.js +68 -0
  409. package/elements/oj-radioset/OjRadiosetBase.js.map +1 -0
  410. package/elements/oj-radioset/OjRadiosetBase.ts +262 -0
  411. package/elements/oj-radioset/index.js +17 -0
  412. package/elements/oj-radioset/index.js.map +1 -0
  413. package/elements/oj-radioset/index.ts +27 -0
  414. package/elements/oj-rating-gauge/OjRatingGauge.js +8 -0
  415. package/elements/oj-rating-gauge/OjRatingGauge.js.map +1 -0
  416. package/elements/oj-rating-gauge/OjRatingGauge.ts +12 -0
  417. package/elements/oj-rating-gauge/OjRatingGaugeBase.js +80 -0
  418. package/elements/oj-rating-gauge/OjRatingGaugeBase.js.map +1 -0
  419. package/elements/oj-rating-gauge/OjRatingGaugeBase.ts +424 -0
  420. package/elements/oj-rating-gauge/index.js +17 -0
  421. package/elements/oj-rating-gauge/index.js.map +1 -0
  422. package/elements/oj-rating-gauge/index.ts +27 -0
  423. package/elements/oj-refresher/OjRefresher.js +8 -0
  424. package/elements/oj-refresher/OjRefresher.js.map +1 -0
  425. package/elements/oj-refresher/OjRefresher.ts +12 -0
  426. package/elements/oj-refresher/OjRefresherBase.js +20 -0
  427. package/elements/oj-refresher/OjRefresherBase.js.map +1 -0
  428. package/elements/oj-refresher/OjRefresherBase.ts +64 -0
  429. package/elements/oj-refresher/index.js +17 -0
  430. package/elements/oj-refresher/index.js.map +1 -0
  431. package/elements/oj-refresher/index.ts +27 -0
  432. package/elements/oj-row-expander/OjRowExpander.js +8 -0
  433. package/elements/oj-row-expander/OjRowExpander.js.map +1 -0
  434. package/elements/oj-row-expander/OjRowExpander.ts +12 -0
  435. package/elements/oj-row-expander/OjRowExpanderBase.js +20 -0
  436. package/elements/oj-row-expander/OjRowExpanderBase.js.map +1 -0
  437. package/elements/oj-row-expander/OjRowExpanderBase.ts +76 -0
  438. package/elements/oj-row-expander/index.js +17 -0
  439. package/elements/oj-row-expander/index.js.map +1 -0
  440. package/elements/oj-row-expander/index.ts +27 -0
  441. package/elements/oj-select-many/OjSelectMany.js +51 -0
  442. package/elements/oj-select-many/OjSelectMany.js.map +1 -0
  443. package/elements/oj-select-many/OjSelectMany.ts +80 -0
  444. package/elements/oj-select-many/OjSelectManyBase.js +89 -0
  445. package/elements/oj-select-many/OjSelectManyBase.js.map +1 -0
  446. package/elements/oj-select-many/OjSelectManyBase.ts +387 -0
  447. package/elements/oj-select-many/index.js +17 -0
  448. package/elements/oj-select-many/index.js.map +1 -0
  449. package/elements/oj-select-many/index.ts +27 -0
  450. package/elements/oj-select-one/OjSelectOne.js +45 -0
  451. package/elements/oj-select-one/OjSelectOne.js.map +1 -0
  452. package/elements/oj-select-one/OjSelectOne.ts +70 -0
  453. package/elements/oj-select-one/OjSelectOneBase.js +89 -0
  454. package/elements/oj-select-one/OjSelectOneBase.js.map +1 -0
  455. package/elements/oj-select-one/OjSelectOneBase.ts +387 -0
  456. package/elements/oj-select-one/index.js +17 -0
  457. package/elements/oj-select-one/index.js.map +1 -0
  458. package/elements/oj-select-one/index.ts +27 -0
  459. package/elements/oj-select-single/OjSelectSingle.js +35 -0
  460. package/elements/oj-select-single/OjSelectSingle.js.map +1 -0
  461. package/elements/oj-select-single/OjSelectSingle.ts +51 -0
  462. package/elements/oj-select-single/OjSelectSingleBase.js +77 -0
  463. package/elements/oj-select-single/OjSelectSingleBase.js.map +1 -0
  464. package/elements/oj-select-single/OjSelectSingleBase.ts +303 -0
  465. package/elements/oj-select-single/index.js +17 -0
  466. package/elements/oj-select-single/index.js.map +1 -0
  467. package/elements/oj-select-single/index.ts +27 -0
  468. package/elements/oj-selector/OjSelector.js +13 -0
  469. package/elements/oj-selector/OjSelector.js.map +1 -0
  470. package/elements/oj-selector/OjSelector.ts +20 -0
  471. package/elements/oj-selector/OjSelectorBase.js +26 -0
  472. package/elements/oj-selector/OjSelectorBase.js.map +1 -0
  473. package/elements/oj-selector/OjSelectorBase.ts +66 -0
  474. package/elements/oj-selector/index.js +17 -0
  475. package/elements/oj-selector/index.js.map +1 -0
  476. package/elements/oj-selector/index.ts +27 -0
  477. package/elements/oj-slider/OjSlider.js +15 -0
  478. package/elements/oj-slider/OjSlider.js.map +1 -0
  479. package/elements/oj-slider/OjSlider.ts +25 -0
  480. package/elements/oj-slider/OjSliderBase.js +71 -0
  481. package/elements/oj-slider/OjSliderBase.js.map +1 -0
  482. package/elements/oj-slider/OjSliderBase.ts +259 -0
  483. package/elements/oj-slider/index.js +17 -0
  484. package/elements/oj-slider/index.js.map +1 -0
  485. package/elements/oj-slider/index.ts +27 -0
  486. package/elements/oj-spark-chart/OjSparkChart.js +8 -0
  487. package/elements/oj-spark-chart/OjSparkChart.js.map +1 -0
  488. package/elements/oj-spark-chart/OjSparkChart.ts +12 -0
  489. package/elements/oj-spark-chart/OjSparkChartBase.js +95 -0
  490. package/elements/oj-spark-chart/OjSparkChartBase.js.map +1 -0
  491. package/elements/oj-spark-chart/OjSparkChartBase.ts +431 -0
  492. package/elements/oj-spark-chart/index.js +17 -0
  493. package/elements/oj-spark-chart/index.js.map +1 -0
  494. package/elements/oj-spark-chart/index.ts +27 -0
  495. package/elements/oj-status-meter-gauge/OjStatusMeterGauge.js +8 -0
  496. package/elements/oj-status-meter-gauge/OjStatusMeterGauge.js.map +1 -0
  497. package/elements/oj-status-meter-gauge/OjStatusMeterGauge.ts +12 -0
  498. package/elements/oj-status-meter-gauge/OjStatusMeterGaugeBase.js +107 -0
  499. package/elements/oj-status-meter-gauge/OjStatusMeterGaugeBase.js.map +1 -0
  500. package/elements/oj-status-meter-gauge/OjStatusMeterGaugeBase.ts +491 -0
  501. package/elements/oj-status-meter-gauge/index.js +17 -0
  502. package/elements/oj-status-meter-gauge/index.js.map +1 -0
  503. package/elements/oj-status-meter-gauge/index.ts +27 -0
  504. package/elements/oj-stream-list/OjStreamList.js +70 -0
  505. package/elements/oj-stream-list/OjStreamList.js.map +1 -0
  506. package/elements/oj-stream-list/OjStreamList.ts +79 -0
  507. package/elements/oj-stream-list/OjStreamListBase.js +29 -0
  508. package/elements/oj-stream-list/OjStreamListBase.js.map +1 -0
  509. package/elements/oj-stream-list/OjStreamListBase.ts +109 -0
  510. package/elements/oj-stream-list/index.js +17 -0
  511. package/elements/oj-stream-list/index.js.map +1 -0
  512. package/elements/oj-stream-list/index.ts +27 -0
  513. package/elements/oj-sunburst/OjSunburst.js +8 -0
  514. package/elements/oj-sunburst/OjSunburst.js.map +1 -0
  515. package/elements/oj-sunburst/OjSunburst.ts +12 -0
  516. package/elements/oj-sunburst/OjSunburstBase.js +104 -0
  517. package/elements/oj-sunburst/OjSunburstBase.js.map +1 -0
  518. package/elements/oj-sunburst/OjSunburstBase.ts +512 -0
  519. package/elements/oj-sunburst/index.js +17 -0
  520. package/elements/oj-sunburst/index.js.map +1 -0
  521. package/elements/oj-sunburst/index.ts +27 -0
  522. package/elements/oj-swipe-actions/OjSwipeActions.js +19 -0
  523. package/elements/oj-swipe-actions/OjSwipeActions.js.map +1 -0
  524. package/elements/oj-swipe-actions/OjSwipeActions.ts +30 -0
  525. package/elements/oj-swipe-actions/OjSwipeActionsBase.js +11 -0
  526. package/elements/oj-swipe-actions/OjSwipeActionsBase.js.map +1 -0
  527. package/elements/oj-swipe-actions/OjSwipeActionsBase.ts +37 -0
  528. package/elements/oj-swipe-actions/index.js +17 -0
  529. package/elements/oj-swipe-actions/index.js.map +1 -0
  530. package/elements/oj-swipe-actions/index.ts +27 -0
  531. package/elements/oj-switch/OjSwitch.js +16 -0
  532. package/elements/oj-switch/OjSwitch.js.map +1 -0
  533. package/elements/oj-switch/OjSwitch.ts +26 -0
  534. package/elements/oj-switch/OjSwitchBase.js +56 -0
  535. package/elements/oj-switch/OjSwitchBase.js.map +1 -0
  536. package/elements/oj-switch/OjSwitchBase.ts +192 -0
  537. package/elements/oj-switch/index.js +17 -0
  538. package/elements/oj-switch/index.js.map +1 -0
  539. package/elements/oj-switch/index.ts +27 -0
  540. package/elements/oj-tab-bar/OjTabBar.js +8 -0
  541. package/elements/oj-tab-bar/OjTabBar.js.map +1 -0
  542. package/elements/oj-tab-bar/OjTabBar.ts +12 -0
  543. package/elements/oj-tab-bar/OjTabBarBase.js +50 -0
  544. package/elements/oj-tab-bar/OjTabBarBase.js.map +1 -0
  545. package/elements/oj-tab-bar/OjTabBarBase.ts +200 -0
  546. package/elements/oj-tab-bar/index.js +17 -0
  547. package/elements/oj-tab-bar/index.js.map +1 -0
  548. package/elements/oj-tab-bar/index.ts +27 -0
  549. package/elements/oj-table/OjTable.js +8 -0
  550. package/elements/oj-table/OjTable.js.map +1 -0
  551. package/elements/oj-table/OjTable.ts +12 -0
  552. package/elements/oj-table/OjTableBase.js +98 -0
  553. package/elements/oj-table/OjTableBase.js.map +1 -0
  554. package/elements/oj-table/OjTableBase.ts +702 -0
  555. package/elements/oj-table/index.js +17 -0
  556. package/elements/oj-table/index.js.map +1 -0
  557. package/elements/oj-table/index.ts +27 -0
  558. package/elements/oj-tag-cloud/OjTagCloud.js +8 -0
  559. package/elements/oj-tag-cloud/OjTagCloud.js.map +1 -0
  560. package/elements/oj-tag-cloud/OjTagCloud.ts +12 -0
  561. package/elements/oj-tag-cloud/OjTagCloudBase.js +68 -0
  562. package/elements/oj-tag-cloud/OjTagCloudBase.js.map +1 -0
  563. package/elements/oj-tag-cloud/OjTagCloudBase.ts +318 -0
  564. package/elements/oj-tag-cloud/index.js +17 -0
  565. package/elements/oj-tag-cloud/index.js.map +1 -0
  566. package/elements/oj-tag-cloud/index.ts +27 -0
  567. package/elements/oj-text-area/OjTextArea.js +10 -0
  568. package/elements/oj-text-area/OjTextArea.js.map +1 -0
  569. package/elements/oj-text-area/OjTextArea.ts +14 -0
  570. package/elements/oj-text-area/OjTextAreaBase.js +95 -0
  571. package/elements/oj-text-area/OjTextAreaBase.js.map +1 -0
  572. package/elements/oj-text-area/OjTextAreaBase.ts +365 -0
  573. package/elements/oj-text-area/index.js +17 -0
  574. package/elements/oj-text-area/index.js.map +1 -0
  575. package/elements/oj-text-area/index.ts +27 -0
  576. package/elements/oj-thematic-map/OjThematicMap.js +8 -0
  577. package/elements/oj-thematic-map/OjThematicMap.js.map +1 -0
  578. package/elements/oj-thematic-map/OjThematicMap.ts +12 -0
  579. package/elements/oj-thematic-map/OjThematicMapBase.js +119 -0
  580. package/elements/oj-thematic-map/OjThematicMapBase.js.map +1 -0
  581. package/elements/oj-thematic-map/OjThematicMapBase.ts +777 -0
  582. package/elements/oj-thematic-map/index.js +17 -0
  583. package/elements/oj-thematic-map/index.js.map +1 -0
  584. package/elements/oj-thematic-map/index.ts +27 -0
  585. package/elements/oj-time-axis/OjTimeAxis.js +8 -0
  586. package/elements/oj-time-axis/OjTimeAxis.js.map +1 -0
  587. package/elements/oj-time-axis/OjTimeAxis.ts +12 -0
  588. package/elements/oj-time-axis/OjTimeAxisBase.js +26 -0
  589. package/elements/oj-time-axis/OjTimeAxisBase.js.map +1 -0
  590. package/elements/oj-time-axis/OjTimeAxisBase.ts +176 -0
  591. package/elements/oj-time-axis/index.js +17 -0
  592. package/elements/oj-time-axis/index.js.map +1 -0
  593. package/elements/oj-time-axis/index.ts +27 -0
  594. package/elements/oj-timeline/OjTimeline.js +8 -0
  595. package/elements/oj-timeline/OjTimeline.js.map +1 -0
  596. package/elements/oj-timeline/OjTimeline.ts +12 -0
  597. package/elements/oj-timeline/OjTimelineBase.js +71 -0
  598. package/elements/oj-timeline/OjTimelineBase.js.map +1 -0
  599. package/elements/oj-timeline/OjTimelineBase.ts +715 -0
  600. package/elements/oj-timeline/index.js +17 -0
  601. package/elements/oj-timeline/index.js.map +1 -0
  602. package/elements/oj-timeline/index.ts +27 -0
  603. package/elements/oj-train/OjTrain.js +8 -0
  604. package/elements/oj-train/OjTrain.js.map +1 -0
  605. package/elements/oj-train/OjTrain.ts +12 -0
  606. package/elements/oj-train/OjTrainBase.js +20 -0
  607. package/elements/oj-train/OjTrainBase.js.map +1 -0
  608. package/elements/oj-train/OjTrainBase.ts +72 -0
  609. package/elements/oj-train/index.js +17 -0
  610. package/elements/oj-train/index.js.map +1 -0
  611. package/elements/oj-train/index.ts +27 -0
  612. package/elements/oj-tree-view/OjTreeView.js +80 -0
  613. package/elements/oj-tree-view/OjTreeView.js.map +1 -0
  614. package/elements/oj-tree-view/OjTreeView.ts +117 -0
  615. package/elements/oj-tree-view/OjTreeViewBase.js +35 -0
  616. package/elements/oj-tree-view/OjTreeViewBase.js.map +1 -0
  617. package/elements/oj-tree-view/OjTreeViewBase.ts +131 -0
  618. package/elements/oj-tree-view/index.js +17 -0
  619. package/elements/oj-tree-view/index.js.map +1 -0
  620. package/elements/oj-tree-view/index.ts +27 -0
  621. package/elements/oj-treemap/OjTreemap.js +8 -0
  622. package/elements/oj-treemap/OjTreemap.js.map +1 -0
  623. package/elements/oj-treemap/OjTreemap.ts +12 -0
  624. package/elements/oj-treemap/OjTreemapBase.js +110 -0
  625. package/elements/oj-treemap/OjTreemapBase.js.map +1 -0
  626. package/elements/oj-treemap/OjTreemapBase.ts +594 -0
  627. package/elements/oj-treemap/index.js +17 -0
  628. package/elements/oj-treemap/index.js.map +1 -0
  629. package/elements/oj-treemap/index.ts +27 -0
  630. package/elements/oj-waterfall-layout/OjWaterfallLayout.js +8 -0
  631. package/elements/oj-waterfall-layout/OjWaterfallLayout.js.map +1 -0
  632. package/elements/oj-waterfall-layout/OjWaterfallLayout.ts +12 -0
  633. package/elements/oj-waterfall-layout/OjWaterfallLayoutBase.js +23 -0
  634. package/elements/oj-waterfall-layout/OjWaterfallLayoutBase.js.map +1 -0
  635. package/elements/oj-waterfall-layout/OjWaterfallLayoutBase.ts +87 -0
  636. package/elements/oj-waterfall-layout/index.js +17 -0
  637. package/elements/oj-waterfall-layout/index.js.map +1 -0
  638. package/elements/oj-waterfall-layout/index.ts +27 -0
  639. package/index.js +171 -0
  640. package/index.js.map +1 -0
  641. package/index.ts +449 -0
  642. package/lib/Expectation.js +189 -0
  643. package/lib/Expectation.js.map +1 -0
  644. package/lib/Expectation.ts +272 -0
  645. package/lib/OjFetch.js +83 -0
  646. package/lib/OjFetch.js.map +1 -0
  647. package/lib/OjFetch.ts +158 -0
  648. package/lib/ScreenshotManager.js +113 -0
  649. package/lib/ScreenshotManager.js.map +1 -0
  650. package/lib/ScreenshotManager.ts +195 -0
  651. package/lib/driver-manager.js +89 -0
  652. package/lib/driver-manager.js.map +1 -0
  653. package/lib/driver-manager.ts +330 -0
  654. package/lib/driver-override.js +116 -0
  655. package/lib/driver-override.js.map +1 -0
  656. package/lib/driver-override.ts +270 -0
  657. package/lib/input-utils.js +24 -0
  658. package/lib/input-utils.js.map +1 -0
  659. package/lib/input-utils.ts +50 -0
  660. package/lib/slot-proxy.js +25 -0
  661. package/lib/slot-proxy.js.map +1 -0
  662. package/lib/slot-proxy.ts +61 -0
  663. package/lib/stale-element.js +26 -0
  664. package/lib/stale-element.js.map +1 -0
  665. package/lib/stale-element.ts +40 -0
  666. package/package.json +19 -0
  667. package/tsconfig.json +10 -0
@@ -0,0 +1,195 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+
4
+ /**
5
+ * Define an interface for objects that (like the WebDriver instance) can take screen shots
6
+ */
7
+ interface ScreenshotTaker {
8
+ takeScreenshot(): Promise<string>;
9
+ }
10
+
11
+ /**
12
+ * The ScreenshotManager interface
13
+ */
14
+ interface ScreenshotManager {
15
+ /**
16
+ * This function will set screenshot location based on test suite name and test name
17
+ * @param suiteName test case's suite name
18
+ * @param testName test case's name
19
+ */
20
+ beforeTest(suiteName: string, testName: string): void
21
+
22
+ /**
23
+ * This function will do cleanup after test execution. It will puerge screenshot for passed test and generate final state
24
+ * screenshot for failed test
25
+ * @param passed boolean to check test state
26
+ */
27
+ afterTest(passed: boolean): void
28
+
29
+ /**
30
+ * This function will take screenshot and save it on the file system
31
+ * @param screenshotTaker an screenshotTaker instance
32
+ * @param name screenshot image name
33
+ * @return a promise
34
+ * @example await screenshotManager.takeAndSaveScreenShot(driver, "before_click");
35
+ */
36
+ takeAndSaveScreenShot(screenshotTaker: ScreenshotTaker, name: string): Promise<void>
37
+ }
38
+
39
+ /**
40
+ * This implementation of ScreenshotManager Interface will not take any screenshot
41
+ */
42
+ class NoOpScreenShotManager implements ScreenshotManager {
43
+ beforeTest(suiteName: string, testName: string): void { }
44
+ afterTest(passed: boolean): void { }
45
+ takeAndSaveScreenShot(screenshotTaker: ScreenshotTaker, name: string): Promise<void> { return null }
46
+ }
47
+
48
+ /**
49
+ * This implementation of ScreenshotManager Interface will take screenshot
50
+ */
51
+ class TakeScreenshotManager implements ScreenshotManager {
52
+
53
+ private _screenshotLocation:string = "";
54
+ private _screenshotsDir: string
55
+
56
+ /**
57
+ * This function will replace all invalid characters with underscore
58
+ * @param name string test name may having some invalid characters
59
+ * @private
60
+ */
61
+ private replaceCharacters(name: string): string {
62
+ var output = name.replace(/[^a-z0-9]/ig, '_');
63
+ return output;
64
+ }
65
+
66
+ /**
67
+ * This constructor will set screenshot root directory on the file system, like <report-root>/screenshots
68
+ * @param screenshotRoot screenshot root directory
69
+ */
70
+ constructor(screenshotRoot: string) {
71
+
72
+ var mochawesomeReportDir = screenshotRoot;
73
+ try {
74
+ if (!fs.existsSync(mochawesomeReportDir)) fs.mkdirSync(mochawesomeReportDir);
75
+ } catch (err) {
76
+ console.error(err);
77
+ console.error(err.stack);
78
+ }
79
+ this._screenshotsDir = mochawesomeReportDir + path.sep + "screenshots";
80
+ try {
81
+ if (!fs.existsSync(this._screenshotsDir)) fs.mkdirSync(this._screenshotsDir);
82
+ } catch (err) {
83
+ console.error(err);
84
+ console.error(err.stack);
85
+ }
86
+ }
87
+
88
+ /**
89
+ * This function will set screenshot location based on test suite name and test name
90
+ * @param suiteName test case's suite name
91
+ * @param testName test case's name
92
+ */
93
+ beforeTest(suiteName: string, testName: string): void {
94
+ var suiteN = this.replaceCharacters(suiteName);
95
+ var testN = this.replaceCharacters(testName);
96
+ var suiteF = this._screenshotsDir + path.sep + suiteN;
97
+ var testF = suiteF + path.sep + testN;
98
+ this._screenshotLocation = testF;
99
+
100
+ try {
101
+ if (!fs.existsSync(suiteF)) fs.mkdirSync(suiteF);
102
+ } catch (err) {
103
+ console.error(err);
104
+ console.error(err.stack);
105
+ }
106
+ try {
107
+ if (!fs.existsSync(testF)) fs.mkdirSync(testF);
108
+ } catch (err) {
109
+ console.error(err);
110
+ console.error(err.stack);
111
+ }
112
+ }
113
+
114
+ /**
115
+ * This function will do cleanup after test execution. It will puerge screenshot for passed test and will generate final state
116
+ * screenshot for failed test
117
+ * @param passed boolean to check test state
118
+ */
119
+ afterTest(passed: boolean): void {
120
+
121
+ if (passed) {
122
+ try {
123
+
124
+ var FOLDER_PATH = this._screenshotLocation;
125
+ if (fs.existsSync(FOLDER_PATH)) {
126
+ var files = fs.readdirSync(FOLDER_PATH);
127
+ files.forEach(element => {
128
+ fs.unlinkSync(FOLDER_PATH + path.sep + element);
129
+ });
130
+ fs.rmdirSync(FOLDER_PATH);
131
+ }
132
+ } catch (err) {
133
+ console.error(err);
134
+ console.error(err.stack);
135
+ }
136
+ }
137
+ }
138
+
139
+ /**
140
+ * This function will take screenshot and save it on the file system
141
+ * @param screenshotTaker a screenshotTaker instance
142
+ * @param name screeshot image name
143
+ */
144
+ async takeAndSaveScreenShot(screenshotTaker: ScreenshotTaker, name: string): Promise<void> {
145
+ var counter = 1;
146
+ var FOLDER_PATH = this._screenshotLocation;
147
+ if (fs.existsSync(FOLDER_PATH)) {
148
+ var files = fs.readdirSync(FOLDER_PATH);
149
+ files.forEach(element => {
150
+ if (element.includes(name)) counter++;
151
+ });
152
+ }
153
+ try {
154
+ const screenshotImg = await screenshotTaker.takeScreenshot();
155
+ fs.writeFileSync(this._screenshotLocation + path.sep + name + counter + ".jpg", screenshotImg, 'base64');
156
+
157
+ } catch (err) {
158
+ console.error(err);
159
+ console.error(err.stack);
160
+ }
161
+
162
+ return null;
163
+ }
164
+ }
165
+
166
+ //Below are the top-level methods of the ScreenshotManager module
167
+
168
+ var currentInstance: ScreenshotManager = new NoOpScreenShotManager();
169
+
170
+ /**
171
+ * This function will create an instance ScreenshotManager
172
+ * @param screenshotRoot screenshot root location
173
+ */
174
+ export function create(screenshotRoot: string): ScreenshotManager {
175
+ if (screenshotRoot) {
176
+ return new TakeScreenshotManager(screenshotRoot);
177
+ }
178
+ else {
179
+ return new NoOpScreenShotManager();
180
+ }
181
+ }
182
+
183
+ /**
184
+ * This function will get an active ScreenshotManager instance
185
+ * @return an active ScreenshotManager instance
186
+ */
187
+ export function get(): ScreenshotManager { return currentInstance }
188
+
189
+ /**
190
+ * This function will set an active ScreenshotManager instance
191
+ * @param screenshotManager an active ScreenshotManager instance
192
+ */
193
+ export function set(screenshotManager: ScreenshotManager): void { currentInstance = screenshotManager }
194
+
195
+
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DriverManager = void 0;
4
+ const selenium_webdriver_1 = require("selenium-webdriver");
5
+ const defaultConfigName = "";
6
+ const defaultCapabilities = new selenium_webdriver_1.Capabilities({
7
+ autoWebview: true,
8
+ browserName: "chrome",
9
+ });
10
+ const defaultTimeouts = {
11
+ implicit: 0,
12
+ pageLoad: 30000,
13
+ script: 30000,
14
+ };
15
+ const configs = {};
16
+ let currentInstance = {
17
+ configName: null,
18
+ driver: null,
19
+ };
20
+ const quitDelay = 500;
21
+ let builder;
22
+ let releaseTimer = setTimeout(() => true, 0);
23
+ class DriverManager {
24
+ static setBuilder(b) {
25
+ if (builder) {
26
+ throw Error("DriverManager Builder instance has already been set, and cannot be set again");
27
+ }
28
+ builder = b;
29
+ }
30
+ static registerConfig(config, name) {
31
+ configs[name || defaultConfigName] = config;
32
+ }
33
+ static async getDriver(configName) {
34
+ clearTimeout(releaseTimer);
35
+ configName = configName || defaultConfigName;
36
+ if (configName === currentInstance.configName) {
37
+ return currentInstance.driver;
38
+ }
39
+ await quitCurrentDriver();
40
+ return createDriver(configName);
41
+ }
42
+ static async getCurrentDriver() {
43
+ return DriverManager.getDriver(currentInstance.configName);
44
+ }
45
+ static releaseDriver(driver) {
46
+ clearTimeout(releaseTimer);
47
+ releaseTimer = setTimeout(async () => {
48
+ await quitCurrentDriver();
49
+ }, quitDelay);
50
+ }
51
+ }
52
+ exports.DriverManager = DriverManager;
53
+ DriverManager.registerConfig({ capabilities: defaultCapabilities, timeouts: defaultTimeouts });
54
+ async function createDriver(configName) {
55
+ const config = configs[configName];
56
+ if (!config) {
57
+ throw Error(`No driver configuration exists for "${configName}"`);
58
+ }
59
+ const caps = new selenium_webdriver_1.Capabilities(configs[defaultConfigName].capabilities);
60
+ if (config.capabilities) {
61
+ caps.merge(config.capabilities);
62
+ }
63
+ const timeouts = Object.assign({}, configs[defaultConfigName].timeouts, config.timeouts);
64
+ if (!builder) {
65
+ builder = new selenium_webdriver_1.Builder();
66
+ }
67
+ const driver = builder.withCapabilities(caps).build();
68
+ currentInstance = { configName, driver };
69
+ await driver.manage().setTimeouts(timeouts);
70
+ return driver;
71
+ }
72
+ async function quitCurrentDriver() {
73
+ const driver = currentInstance.driver;
74
+ if (driver) {
75
+ try {
76
+ await driver.quit();
77
+ }
78
+ catch (ex) {
79
+ console.warn(ex);
80
+ }
81
+ finally {
82
+ currentInstance = {
83
+ configName: null,
84
+ driver: null,
85
+ };
86
+ }
87
+ }
88
+ }
89
+ //# sourceMappingURL=driver-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-manager.js","sourceRoot":"","sources":["../../../rt/src/test/webdriverjs/oraclejet-webdriver/lib/driver-manager.ts"],"names":[],"mappings":";;;AAAA,2DAI4B;AA2B5B,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,mBAAmB,GAAG,IAAI,iCAAY,CAAC;IAC3C,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,QAAQ;CACtB,CAAC,CAAC;AACH,MAAM,eAAe,GAAa;IAChC,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,KAAK;CACd,CAAC;AACF,MAAM,OAAO,GAAiD,EAAE,CAAC;AACjE,IAAI,eAAe,GAA8C;IAC/D,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;CACb,CAAC;AAQF,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,IAAI,OAAgB,CAAC;AAKrB,IAAI,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAoF7C,MAAa,aAAa;IAiBjB,MAAM,CAAC,UAAU,CAAC,CAAU;QACjC,IAAI,OAAO,EAAE;YACX,MAAM,KAAK,CAAC,8EAA8E,CAAC,CAAC;SAC7F;QACD,OAAO,GAAG,CAAC,CAAC;IACd,CAAC;IAuCM,MAAM,CAAC,cAAc,CAAC,MAAiC,EAAE,IAAa;QAC3E,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAC,GAAG,MAAM,CAAC;IAC9C,CAAC;IAgCM,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,UAAmB;QAC/C,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3B,UAAU,GAAG,UAAU,IAAI,iBAAiB,CAAC;QAE7C,IAAI,UAAU,KAAK,eAAe,CAAC,UAAU,EAAE;YAC7C,OAAO,eAAe,CAAC,MAAM,CAAC;SAC/B;QAED,MAAM,iBAAiB,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IASM,MAAM,CAAC,KAAK,CAAC,gBAAgB;QAClC,OAAO,aAAa,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAOM,MAAM,CAAC,aAAa,CAAC,MAAiB;QAC3C,YAAY,CAAC,YAAY,CAAC,CAAC;QAI3B,YAAY,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,iBAAiB,EAAE,CAAC;QAC5B,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC;CACF;AApID,sCAoIC;AACD,aAAa,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;AAU/F,KAAK,UAAU,YAAY,CAAC,UAAkB;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,KAAK,CAAC,uCAAuC,UAAU,GAAG,CAAC,CAAC;KACnE;IAED,MAAM,IAAI,GAAG,IAAI,iCAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,YAAY,EAAE;QACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACjC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzF,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,IAAI,4BAAO,EAAE,CAAC;KACzB;IACD,MAAM,MAAM,GAAc,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,eAAe,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAIzC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE5C,OAAO,MAAM,CAAC;AAChB,CAAC;AAKD,KAAK,UAAU,iBAAiB;IAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;IACtC,IAAI,MAAM,EAAE;QACV,IAAI;YACF,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;SACrB;QAAC,OAAO,EAAE,EAAE;YAEX,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAClB;gBAAS;YACR,eAAe,GAAG;gBAChB,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,IAAI;aACb,CAAC;SACH;KACF;AACH,CAAC"}
@@ -0,0 +1,330 @@
1
+ import {
2
+ Builder,
3
+ Capabilities,
4
+ WebDriver,
5
+ } from "selenium-webdriver";
6
+
7
+ interface Timeouts {
8
+ /**
9
+ * The timeout value for script execution. Default 30000
10
+ */
11
+ script?: number;
12
+ /**
13
+ * The timeout value for page loading (and to be ready). Default 30000
14
+ */
15
+ pageLoad?: number;
16
+ /**
17
+ * The timeout value for finding an element on the page. Default 0
18
+ */
19
+ implicit?: number;
20
+ }
21
+ interface CapabilitiesConfiguration {
22
+ /**
23
+ * The WebDriver Capabilties for the configuration
24
+ */
25
+ capabilities?: Capabilities;
26
+ /**
27
+ * The WebDriver timeout values for the configuration
28
+ */
29
+ timeouts?: Timeouts;
30
+ }
31
+
32
+ const defaultConfigName = "";
33
+ const defaultCapabilities = new Capabilities({
34
+ autoWebview: true,
35
+ browserName: "chrome",
36
+ });
37
+ const defaultTimeouts: Timeouts = {
38
+ implicit: 0,
39
+ pageLoad: 30000,
40
+ script: 30000,
41
+ };
42
+ const configs: { [key: string]: CapabilitiesConfiguration } = {};
43
+ let currentInstance: { configName: string, driver: WebDriver } = {
44
+ configName: null,
45
+ driver: null,
46
+ };
47
+
48
+ /**
49
+ * The delay, in milliseconds, that the manager will wait after the driver is
50
+ * release to see if there are pending requests for a driver instance. If no
51
+ * requests exist, then the driver is closed, and subsequent requests will
52
+ * receive a new instance.
53
+ */
54
+ const quitDelay = 500;
55
+ let builder: Builder;
56
+ // The NodeJS.Timer used to cleanup the driver instance if no subsequent test
57
+ // asks for the driver. The type (NodeJS.Timer) cannot be defined here because
58
+ // typedoc cannot resolve the NodeJS namespace, so we infer it by calling
59
+ // setTimeout instead.
60
+ let releaseTimer = setTimeout(() => true, 0);
61
+
62
+ /**
63
+ * Manage instances of [WebDriver]
64
+ * (https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html)
65
+ * to be used by the tests. DriverManager
66
+ * allows a single place where the WebDriver instance can be configured and
67
+ * reused. Traditionally, tests instantiate the WebDriver instance on their own,
68
+ * passing configurations such as the browser to use:
69
+ * ```javascript
70
+ * let driver = new Builder().withCapabilities({
71
+ * browserName: "chrome"
72
+ * }).build()
73
+ * ```
74
+ * This boilerplate code then has to be copied to every test. Additionally, if
75
+ * the capabilities need to change (say, running against a different browser),
76
+ * that change must be applied to all test files.
77
+ *
78
+ * DriverManager addresses this problem by centralizing the place whereby
79
+ * the configuration is done, and persists that configuration for all
80
+ * subsequent requests for the WebDriver instance. The configuration only needs
81
+ * to be set once in a "setup" file, and tests retrieve the configured instance
82
+ * without needing to define anything else.
83
+ *
84
+ * A sample <code>mocha-setup.ts</code> file which configures DriverManager
85
+ * ```javascript
86
+ * import { DriverManager } from "@oracle/oraclejet-webdriver";
87
+ *
88
+ * DriverManager.registerConfig({
89
+ * capabilities: new Capabilities({
90
+ * browserName: "chrome"
91
+ * })
92
+ * })
93
+ * ```
94
+ * This setup test script should be run before any other tests.
95
+ * ```bash
96
+ * $ node node_modules/mocha/bin/mocha --require=ts-node/register mocha-setup.ts other-test.spec.ts ...
97
+ * ```
98
+ * Test files are agnostic of the driver configuration, and simply get the instance
99
+ * by calling <code>getDriver()</code>
100
+ * ```javascript
101
+ * import { DriverManager } from "@oracle/oraclejet-webdriver";
102
+ *
103
+ * describe("My test suite", function() {
104
+ * let driver: WebDriver;
105
+ *
106
+ * before(async function() {
107
+ * driver = await DriverManager.getDriver();
108
+ * })
109
+ * it("open a page to test", async function() {
110
+ * await driver.get("...")
111
+ * })
112
+ * after(async function() {
113
+ * await DriverManager.releaseDriver(driver);
114
+ * })
115
+ * })
116
+ * ```
117
+ *
118
+ * ## Set default timeouts for WebDriver from Mocha.
119
+ * When Mocha is used to start the WebDriver tests, there are two sets of timeout
120
+ * values--one from Mocha and one from WebDriver. This causes some confusion as
121
+ * the command-line argument <code>--timeout=nnn</code> is typically the only one
122
+ * set and assumed to be the only timeout value in play. However, WebDriver has
123
+ * its own set of timeout values, whose defaults are sometimes longer than what's
124
+ * set for Mocha. When this happens, WebDriver may be waiting on a condition to
125
+ * timeout, but Mocha has errored the test because its own timeout was exceeded.
126
+ * To ensure that WebDriver timeout conditions are properly reported to the test
127
+ * runner (Mocha), its timeout values must be set to a value shorter than the
128
+ * runner's. This is typically done in the setup test.
129
+ *
130
+ * ### Set WebDriver timeout to 5 seconds sooner than Mocha
131
+ * ```javascript
132
+ * const mochaTimeout = this.timeouts();
133
+ * const wdTimeout = mochaTimeout - 5000;
134
+ * DriverManager.registerConfig({
135
+ * timeouts: {
136
+ * pageLoad: wdTimeout,
137
+ * script: wdTimeout,
138
+ * implicit: wdTimeout
139
+ * }
140
+ * });
141
+ * ```
142
+ *
143
+ */
144
+ export class DriverManager {
145
+ /**
146
+ * Optionally set the [Builder]
147
+ * (https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_Builder.html)
148
+ * instance used by DriverManager to create WebDriver.
149
+ * The Builder allows different settings for thigns such as the remote server,
150
+ * proxies, and other runtime options often needed when running in distributed
151
+ * environments.
152
+ * The instance can be preconfigured with capabilities, and any additional
153
+ * capabilities from [[registerConfig]] will also be applied during the
154
+ * creation process. If no Builder is explicitly passed, a default one will
155
+ * be used.
156
+ * If setting a custom Builder, this function must be called before the first
157
+ * test calls [[getDriver]], and must only be called once per test run. If called
158
+ * multiple times or after [[getDriver]], an error will be thrown.
159
+ * @param b A builder instance
160
+ */
161
+ public static setBuilder(b: Builder) {
162
+ if (builder) {
163
+ throw Error("DriverManager Builder instance has already been set, and cannot be set again");
164
+ }
165
+ builder = b;
166
+ }
167
+ /**
168
+ * Register a configuration for WebDriver instances. Configurations consist of
169
+ * [Capabilities]
170
+ * (https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_Capabilities.html)
171
+ * and/or [Timeouts]
172
+ * (https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/capabilities_exports_Timeouts.html).
173
+ * This configuration is used by [[getDriver]] to retrieve a configured WebDriver
174
+ * instance.
175
+ * @param config The driver configuration
176
+ * @param name An optional name to assocaite with the config. If no name is given,
177
+ * the config will be the default.
178
+ *
179
+ * ### Register a default config
180
+ * ```javascript
181
+ * DriverManager.registerConfig(
182
+ * {
183
+ * capabilities: new Capabilities({
184
+ * browserName: "chrome"
185
+ * }),
186
+ * timeouts: {
187
+ * implicit: 5000
188
+ * }
189
+ * }
190
+ * );
191
+ * ```
192
+ * ### Register a Firefox config
193
+ * ```javascript
194
+ * DriverManager.registerConfig(
195
+ * {
196
+ * capabilities: new Capabilities({
197
+ * browserName: "firefox",
198
+ * hideAlerts: true
199
+ * })
200
+ * },
201
+ * "firefox-no-alerts"
202
+ * );
203
+ * ```
204
+ */
205
+ public static registerConfig(config: CapabilitiesConfiguration, name?: string): void {
206
+ configs[name || defaultConfigName] = config;
207
+ }
208
+
209
+ /**
210
+ * Get a
211
+ * [WebDriver](https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html)
212
+ * instance for a given configuration. If no configName is given, the returned
213
+ * driver will use the default configuration.
214
+ * @see [[registerConfig]]
215
+ *
216
+ * ### Get driver with default capabilities
217
+ * ```javascript
218
+ * let driver = await DriverManager.getDriver();
219
+ * ```
220
+ * ### Configure and get Firefox driver
221
+ * ```javascript
222
+ * // mocha-setup.ts
223
+ * DriverManager.registerConfig(
224
+ * {
225
+ * browserName: "firefox"
226
+ * },
227
+ * "firefox-config");
228
+ * // test.spec.ts
229
+ * let driver = await DriverManager.getDriver("firefox-config");
230
+ * ```
231
+ * @param configName An optional configuration name, registered through
232
+ * [[registerConfig]], whose set will be applied to the driver instance. If no
233
+ * name is given, the default configuration with the "chrome" browser
234
+ * will be used. If the given configName doesn't exist, an error will be thrown.
235
+ * @return A Promise that resolves to a WebDriver instance, configured with
236
+ * custom capabilities for the given configName, or the default capabilities
237
+ * if none is specified.
238
+ */
239
+ public static async getDriver(configName?: string): Promise<WebDriver> {
240
+ clearTimeout(releaseTimer);
241
+ configName = configName || defaultConfigName;
242
+
243
+ if (configName === currentInstance.configName) {
244
+ return currentInstance.driver;
245
+ }
246
+
247
+ await quitCurrentDriver();
248
+ return createDriver(configName);
249
+ }
250
+
251
+ /**
252
+ * Gets the current driver instance, if one exists, otherwise create and
253
+ * return the default one. This method is useful for test setups which evaluate
254
+ * the outcome of the previous test to capture screenshots on failures. After-
255
+ * scripts call <code>getCurrentDriver</code> to get the instance of the driver
256
+ * that experienced the test failure, then capture the screenshot from it.
257
+ */
258
+ public static async getCurrentDriver(): Promise<WebDriver> {
259
+ return DriverManager.getDriver(currentInstance.configName);
260
+ }
261
+
262
+ /**
263
+ * Release the WebDriver instance from use. Called when each test is done
264
+ * with its driver usage, typicall, in the Mocha <code>after</code> function.
265
+ * @param driver The WebDriver instance
266
+ */
267
+ public static releaseDriver(driver: WebDriver): void {
268
+ clearTimeout(releaseTimer);
269
+ // Wait for the delay to quit the driver. If [getDriver] was called before
270
+ // the timeout expired, then it will have cleared the timeout so that the
271
+ // instance isn't closed.
272
+ releaseTimer = setTimeout(async () => {
273
+ await quitCurrentDriver();
274
+ }, quitDelay);
275
+ }
276
+ }
277
+ DriverManager.registerConfig({ capabilities: defaultCapabilities, timeouts: defaultTimeouts });
278
+
279
+ /**
280
+ * Create a WebDriver instance from the given configuration name. The config should
281
+ * already be registered via [registerConfig].
282
+ * @param configName The configuration name used to retrieve the configuration
283
+ * object for the driver instance
284
+ * @return A Promise which resolves to the configured WebDriver instance
285
+ * @private
286
+ */
287
+ async function createDriver(configName: string) {
288
+ const config = configs[configName];
289
+ if (!config) {
290
+ throw Error(`No driver configuration exists for "${configName}"`);
291
+ }
292
+ // Merge default capabilities with custom ones
293
+ const caps = new Capabilities(configs[defaultConfigName].capabilities);
294
+ if (config.capabilities) {
295
+ caps.merge(config.capabilities);
296
+ }
297
+ // Merge default timeouts with custom ones
298
+ const timeouts = Object.assign({}, configs[defaultConfigName].timeouts, config.timeouts);
299
+ if (!builder) {
300
+ builder = new Builder();
301
+ }
302
+ const driver: WebDriver = builder.withCapabilities(caps).build();
303
+ currentInstance = { configName, driver };
304
+ // selenium-webdriver^3.60 has setTimeouts(),
305
+ // but @types/selenium-webdriver^3.0.8 (latest) has timeouts(). Need to cast
306
+ // here to avoid compilation failure.
307
+ await driver.manage().setTimeouts(timeouts);
308
+
309
+ return driver;
310
+ }
311
+
312
+ /**
313
+ * @private
314
+ */
315
+ async function quitCurrentDriver() {
316
+ const driver = currentInstance.driver;
317
+ if (driver) {
318
+ try {
319
+ await driver.quit();
320
+ } catch (ex) {
321
+ // Driver may have already been closed
322
+ console.warn(ex);
323
+ } finally {
324
+ currentInstance = {
325
+ configName: null,
326
+ driver: null,
327
+ };
328
+ }
329
+ }
330
+ }