UrgentcareCLI 0.1.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (317) hide show
  1. checksums.yaml +4 -4
  2. data/lib/UrgentCare/CLI.rb +1 -2
  3. data/lib/UrgentCare/Scraper.rb +65 -0
  4. data/lib/UrgentCare/version.rb +2 -2
  5. data/lib/UrgentCare.rb +1 -0
  6. metadata +3 -313
  7. data/.gitignore +0 -11
  8. data/.rspec +0 -3
  9. data/.travis.yml +0 -5
  10. data/CODE_OF_CONDUCT.md +0 -74
  11. data/Gemfile +0 -12
  12. data/Gemfile.lock +0 -84
  13. data/LICENSE.txt +0 -21
  14. data/Notes +0 -41
  15. data/README.md +0 -41
  16. data/Rakefile +0 -8
  17. data/UrgentCare.gemspec +0 -39
  18. data/background.jpg +0 -0
  19. data/data.txt +0 -4
  20. data/lib/Urgentcare/Scraper.rb +0 -78
  21. data/node_modules/.bin/rimraf +0 -1
  22. data/node_modules/.package-lock.json +0 -250
  23. data/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  24. data/node_modules/balanced-match/LICENSE.md +0 -21
  25. data/node_modules/balanced-match/README.md +0 -97
  26. data/node_modules/balanced-match/index.js +0 -62
  27. data/node_modules/balanced-match/package.json +0 -48
  28. data/node_modules/brace-expansion/LICENSE +0 -21
  29. data/node_modules/brace-expansion/README.md +0 -129
  30. data/node_modules/brace-expansion/index.js +0 -201
  31. data/node_modules/brace-expansion/package.json +0 -47
  32. data/node_modules/concat-map/.travis.yml +0 -4
  33. data/node_modules/concat-map/LICENSE +0 -18
  34. data/node_modules/concat-map/README.markdown +0 -62
  35. data/node_modules/concat-map/example/map.js +0 -6
  36. data/node_modules/concat-map/index.js +0 -13
  37. data/node_modules/concat-map/package.json +0 -43
  38. data/node_modules/concat-map/test/map.js +0 -39
  39. data/node_modules/core-util-is/LICENSE +0 -19
  40. data/node_modules/core-util-is/README.md +0 -3
  41. data/node_modules/core-util-is/float.patch +0 -604
  42. data/node_modules/core-util-is/lib/util.js +0 -107
  43. data/node_modules/core-util-is/package.json +0 -32
  44. data/node_modules/core-util-is/test.js +0 -68
  45. data/node_modules/fs.realpath/LICENSE +0 -43
  46. data/node_modules/fs.realpath/README.md +0 -33
  47. data/node_modules/fs.realpath/index.js +0 -66
  48. data/node_modules/fs.realpath/old.js +0 -303
  49. data/node_modules/fs.realpath/package.json +0 -26
  50. data/node_modules/glob/LICENSE +0 -21
  51. data/node_modules/glob/README.md +0 -375
  52. data/node_modules/glob/changelog.md +0 -67
  53. data/node_modules/glob/common.js +0 -234
  54. data/node_modules/glob/glob.js +0 -788
  55. data/node_modules/glob/package.json +0 -51
  56. data/node_modules/glob/sync.js +0 -484
  57. data/node_modules/immediate/LICENSE.txt +0 -20
  58. data/node_modules/immediate/README.md +0 -93
  59. data/node_modules/immediate/dist/immediate.js +0 -75
  60. data/node_modules/immediate/dist/immediate.min.js +0 -1
  61. data/node_modules/immediate/lib/browser.js +0 -69
  62. data/node_modules/immediate/lib/index.js +0 -73
  63. data/node_modules/immediate/package.json +0 -42
  64. data/node_modules/inflight/LICENSE +0 -15
  65. data/node_modules/inflight/README.md +0 -37
  66. data/node_modules/inflight/inflight.js +0 -54
  67. data/node_modules/inflight/package.json +0 -29
  68. data/node_modules/inherits/LICENSE +0 -16
  69. data/node_modules/inherits/README.md +0 -42
  70. data/node_modules/inherits/inherits.js +0 -9
  71. data/node_modules/inherits/inherits_browser.js +0 -27
  72. data/node_modules/inherits/package.json +0 -29
  73. data/node_modules/isarray/.npmignore +0 -1
  74. data/node_modules/isarray/.travis.yml +0 -4
  75. data/node_modules/isarray/Makefile +0 -6
  76. data/node_modules/isarray/README.md +0 -60
  77. data/node_modules/isarray/component.json +0 -19
  78. data/node_modules/isarray/index.js +0 -5
  79. data/node_modules/isarray/package.json +0 -45
  80. data/node_modules/isarray/test.js +0 -20
  81. data/node_modules/jszip/.codeclimate.yml +0 -16
  82. data/node_modules/jszip/.editorconfig +0 -8
  83. data/node_modules/jszip/.jshintignore +0 -1
  84. data/node_modules/jszip/.jshintrc +0 -21
  85. data/node_modules/jszip/.travis.yml +0 -17
  86. data/node_modules/jszip/CHANGES.md +0 -163
  87. data/node_modules/jszip/LICENSE.markdown +0 -651
  88. data/node_modules/jszip/README.markdown +0 -35
  89. data/node_modules/jszip/dist/jszip.js +0 -30
  90. data/node_modules/jszip/dist/jszip.min.js +0 -13
  91. data/node_modules/jszip/index.d.ts +0 -270
  92. data/node_modules/jszip/lib/base64.js +0 -106
  93. data/node_modules/jszip/lib/compressedObject.js +0 -74
  94. data/node_modules/jszip/lib/compressions.js +0 -14
  95. data/node_modules/jszip/lib/crc32.js +0 -77
  96. data/node_modules/jszip/lib/defaults.js +0 -11
  97. data/node_modules/jszip/lib/external.js +0 -19
  98. data/node_modules/jszip/lib/flate.js +0 -85
  99. data/node_modules/jszip/lib/generate/ZipFileWorker.js +0 -540
  100. data/node_modules/jszip/lib/generate/index.js +0 -57
  101. data/node_modules/jszip/lib/index.js +0 -52
  102. data/node_modules/jszip/lib/license_header.js +0 -11
  103. data/node_modules/jszip/lib/load.js +0 -81
  104. data/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +0 -74
  105. data/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +0 -42
  106. data/node_modules/jszip/lib/nodejsUtils.js +0 -57
  107. data/node_modules/jszip/lib/object.js +0 -389
  108. data/node_modules/jszip/lib/readable-stream-browser.js +0 -9
  109. data/node_modules/jszip/lib/reader/ArrayReader.js +0 -57
  110. data/node_modules/jszip/lib/reader/DataReader.js +0 -116
  111. data/node_modules/jszip/lib/reader/NodeBufferReader.js +0 -19
  112. data/node_modules/jszip/lib/reader/StringReader.js +0 -38
  113. data/node_modules/jszip/lib/reader/Uint8ArrayReader.js +0 -22
  114. data/node_modules/jszip/lib/reader/readerFor.js +0 -28
  115. data/node_modules/jszip/lib/signature.js +0 -7
  116. data/node_modules/jszip/lib/stream/ConvertWorker.js +0 -26
  117. data/node_modules/jszip/lib/stream/Crc32Probe.js +0 -24
  118. data/node_modules/jszip/lib/stream/DataLengthProbe.js +0 -29
  119. data/node_modules/jszip/lib/stream/DataWorker.js +0 -116
  120. data/node_modules/jszip/lib/stream/GenericWorker.js +0 -263
  121. data/node_modules/jszip/lib/stream/StreamHelper.js +0 -212
  122. data/node_modules/jszip/lib/support.js +0 -38
  123. data/node_modules/jszip/lib/utf8.js +0 -275
  124. data/node_modules/jszip/lib/utils.js +0 -476
  125. data/node_modules/jszip/lib/zipEntries.js +0 -262
  126. data/node_modules/jszip/lib/zipEntry.js +0 -294
  127. data/node_modules/jszip/lib/zipObject.js +0 -133
  128. data/node_modules/jszip/package.json +0 -63
  129. data/node_modules/jszip/vendor/FileSaver.js +0 -247
  130. data/node_modules/lie/README.md +0 -62
  131. data/node_modules/lie/dist/lie.js +0 -350
  132. data/node_modules/lie/dist/lie.min.js +0 -1
  133. data/node_modules/lie/dist/lie.polyfill.js +0 -358
  134. data/node_modules/lie/dist/lie.polyfill.min.js +0 -1
  135. data/node_modules/lie/lib/browser.js +0 -273
  136. data/node_modules/lie/lib/index.js +0 -298
  137. data/node_modules/lie/license.md +0 -7
  138. data/node_modules/lie/lie.d.ts +0 -244
  139. data/node_modules/lie/package.json +0 -69
  140. data/node_modules/lie/polyfill.js +0 -4
  141. data/node_modules/minimatch/LICENSE +0 -15
  142. data/node_modules/minimatch/README.md +0 -209
  143. data/node_modules/minimatch/minimatch.js +0 -923
  144. data/node_modules/minimatch/package.json +0 -30
  145. data/node_modules/once/LICENSE +0 -15
  146. data/node_modules/once/README.md +0 -79
  147. data/node_modules/once/once.js +0 -42
  148. data/node_modules/once/package.json +0 -33
  149. data/node_modules/pako/CHANGELOG.md +0 -164
  150. data/node_modules/pako/LICENSE +0 -21
  151. data/node_modules/pako/README.md +0 -191
  152. data/node_modules/pako/dist/pako.js +0 -6818
  153. data/node_modules/pako/dist/pako.min.js +0 -1
  154. data/node_modules/pako/dist/pako_deflate.js +0 -3997
  155. data/node_modules/pako/dist/pako_deflate.min.js +0 -1
  156. data/node_modules/pako/dist/pako_inflate.js +0 -3300
  157. data/node_modules/pako/dist/pako_inflate.min.js +0 -1
  158. data/node_modules/pako/index.js +0 -14
  159. data/node_modules/pako/lib/deflate.js +0 -400
  160. data/node_modules/pako/lib/inflate.js +0 -423
  161. data/node_modules/pako/lib/utils/common.js +0 -105
  162. data/node_modules/pako/lib/utils/strings.js +0 -187
  163. data/node_modules/pako/lib/zlib/README +0 -59
  164. data/node_modules/pako/lib/zlib/adler32.js +0 -51
  165. data/node_modules/pako/lib/zlib/constants.js +0 -68
  166. data/node_modules/pako/lib/zlib/crc32.js +0 -59
  167. data/node_modules/pako/lib/zlib/deflate.js +0 -1874
  168. data/node_modules/pako/lib/zlib/gzheader.js +0 -58
  169. data/node_modules/pako/lib/zlib/inffast.js +0 -345
  170. data/node_modules/pako/lib/zlib/inflate.js +0 -1556
  171. data/node_modules/pako/lib/zlib/inftrees.js +0 -343
  172. data/node_modules/pako/lib/zlib/messages.js +0 -32
  173. data/node_modules/pako/lib/zlib/trees.js +0 -1222
  174. data/node_modules/pako/lib/zlib/zstream.js +0 -47
  175. data/node_modules/pako/package.json +0 -44
  176. data/node_modules/path-is-absolute/index.js +0 -20
  177. data/node_modules/path-is-absolute/license +0 -21
  178. data/node_modules/path-is-absolute/package.json +0 -43
  179. data/node_modules/path-is-absolute/readme.md +0 -59
  180. data/node_modules/process-nextick-args/index.js +0 -45
  181. data/node_modules/process-nextick-args/license.md +0 -19
  182. data/node_modules/process-nextick-args/package.json +0 -25
  183. data/node_modules/process-nextick-args/readme.md +0 -18
  184. data/node_modules/readable-stream/.travis.yml +0 -34
  185. data/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  186. data/node_modules/readable-stream/GOVERNANCE.md +0 -136
  187. data/node_modules/readable-stream/LICENSE +0 -47
  188. data/node_modules/readable-stream/README.md +0 -58
  189. data/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
  190. data/node_modules/readable-stream/duplex-browser.js +0 -1
  191. data/node_modules/readable-stream/duplex.js +0 -1
  192. data/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
  193. data/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
  194. data/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
  195. data/node_modules/readable-stream/lib/_stream_transform.js +0 -214
  196. data/node_modules/readable-stream/lib/_stream_writable.js +0 -687
  197. data/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
  198. data/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -74
  199. data/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  200. data/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  201. data/node_modules/readable-stream/package.json +0 -52
  202. data/node_modules/readable-stream/passthrough.js +0 -1
  203. data/node_modules/readable-stream/readable-browser.js +0 -7
  204. data/node_modules/readable-stream/readable.js +0 -19
  205. data/node_modules/readable-stream/transform.js +0 -1
  206. data/node_modules/readable-stream/writable-browser.js +0 -1
  207. data/node_modules/readable-stream/writable.js +0 -8
  208. data/node_modules/rimraf/LICENSE +0 -15
  209. data/node_modules/rimraf/README.md +0 -101
  210. data/node_modules/rimraf/bin.js +0 -50
  211. data/node_modules/rimraf/package.json +0 -29
  212. data/node_modules/rimraf/rimraf.js +0 -372
  213. data/node_modules/safe-buffer/LICENSE +0 -21
  214. data/node_modules/safe-buffer/README.md +0 -584
  215. data/node_modules/safe-buffer/index.d.ts +0 -187
  216. data/node_modules/safe-buffer/index.js +0 -62
  217. data/node_modules/safe-buffer/package.json +0 -37
  218. data/node_modules/selenium-webdriver/CHANGES.md +0 -1114
  219. data/node_modules/selenium-webdriver/LICENSE +0 -202
  220. data/node_modules/selenium-webdriver/NOTICE +0 -2
  221. data/node_modules/selenium-webdriver/README.md +0 -229
  222. data/node_modules/selenium-webdriver/chrome.js +0 -295
  223. data/node_modules/selenium-webdriver/chromium.js +0 -829
  224. data/node_modules/selenium-webdriver/devtools/CDPConnection.js +0 -35
  225. data/node_modules/selenium-webdriver/edge.js +0 -224
  226. data/node_modules/selenium-webdriver/example/chrome_android.js +0 -45
  227. data/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js +0 -46
  228. data/node_modules/selenium-webdriver/example/firefox_channels.js +0 -84
  229. data/node_modules/selenium-webdriver/example/google_search.js +0 -50
  230. data/node_modules/selenium-webdriver/example/google_search_test.js +0 -70
  231. data/node_modules/selenium-webdriver/example/headless.js +0 -63
  232. data/node_modules/selenium-webdriver/example/logging.js +0 -64
  233. data/node_modules/selenium-webdriver/firefox.js +0 -789
  234. data/node_modules/selenium-webdriver/http/index.js +0 -324
  235. data/node_modules/selenium-webdriver/http/util.js +0 -172
  236. data/node_modules/selenium-webdriver/ie.js +0 -503
  237. data/node_modules/selenium-webdriver/index.js +0 -825
  238. data/node_modules/selenium-webdriver/io/exec.js +0 -162
  239. data/node_modules/selenium-webdriver/io/index.js +0 -348
  240. data/node_modules/selenium-webdriver/io/zip.js +0 -223
  241. data/node_modules/selenium-webdriver/lib/atoms/find-elements.js +0 -123
  242. data/node_modules/selenium-webdriver/lib/atoms/get-attribute.js +0 -101
  243. data/node_modules/selenium-webdriver/lib/atoms/is-displayed.js +0 -101
  244. data/node_modules/selenium-webdriver/lib/atoms/mutation-listener.js +0 -55
  245. data/node_modules/selenium-webdriver/lib/by.js +0 -415
  246. data/node_modules/selenium-webdriver/lib/capabilities.js +0 -553
  247. data/node_modules/selenium-webdriver/lib/command.js +0 -206
  248. data/node_modules/selenium-webdriver/lib/error.js +0 -605
  249. data/node_modules/selenium-webdriver/lib/http.js +0 -704
  250. data/node_modules/selenium-webdriver/lib/input.js +0 -946
  251. data/node_modules/selenium-webdriver/lib/logging.js +0 -661
  252. data/node_modules/selenium-webdriver/lib/promise.js +0 -285
  253. data/node_modules/selenium-webdriver/lib/proxy.js +0 -212
  254. data/node_modules/selenium-webdriver/lib/session.js +0 -77
  255. data/node_modules/selenium-webdriver/lib/symbols.js +0 -37
  256. data/node_modules/selenium-webdriver/lib/until.js +0 -429
  257. data/node_modules/selenium-webdriver/lib/webdriver.js +0 -2919
  258. data/node_modules/selenium-webdriver/net/index.js +0 -107
  259. data/node_modules/selenium-webdriver/net/portprober.js +0 -75
  260. data/node_modules/selenium-webdriver/opera.js +0 -406
  261. data/node_modules/selenium-webdriver/package.json +0 -54
  262. data/node_modules/selenium-webdriver/proxy.js +0 -32
  263. data/node_modules/selenium-webdriver/remote/index.js +0 -624
  264. data/node_modules/selenium-webdriver/safari.js +0 -168
  265. data/node_modules/selenium-webdriver/testing/index.js +0 -504
  266. data/node_modules/set-immediate-shim/index.js +0 -7
  267. data/node_modules/set-immediate-shim/package.json +0 -34
  268. data/node_modules/set-immediate-shim/readme.md +0 -31
  269. data/node_modules/string_decoder/.travis.yml +0 -50
  270. data/node_modules/string_decoder/LICENSE +0 -48
  271. data/node_modules/string_decoder/README.md +0 -47
  272. data/node_modules/string_decoder/lib/string_decoder.js +0 -296
  273. data/node_modules/string_decoder/package.json +0 -31
  274. data/node_modules/tmp/CHANGELOG.md +0 -288
  275. data/node_modules/tmp/LICENSE +0 -21
  276. data/node_modules/tmp/README.md +0 -365
  277. data/node_modules/tmp/lib/tmp.js +0 -780
  278. data/node_modules/tmp/node_modules/.bin/rimraf +0 -1
  279. data/node_modules/tmp/node_modules/rimraf/CHANGELOG.md +0 -65
  280. data/node_modules/tmp/node_modules/rimraf/LICENSE +0 -15
  281. data/node_modules/tmp/node_modules/rimraf/README.md +0 -101
  282. data/node_modules/tmp/node_modules/rimraf/bin.js +0 -68
  283. data/node_modules/tmp/node_modules/rimraf/package.json +0 -32
  284. data/node_modules/tmp/node_modules/rimraf/rimraf.js +0 -360
  285. data/node_modules/tmp/package.json +0 -58
  286. data/node_modules/util-deprecate/History.md +0 -16
  287. data/node_modules/util-deprecate/LICENSE +0 -24
  288. data/node_modules/util-deprecate/README.md +0 -53
  289. data/node_modules/util-deprecate/browser.js +0 -67
  290. data/node_modules/util-deprecate/node.js +0 -6
  291. data/node_modules/util-deprecate/package.json +0 -27
  292. data/node_modules/wrappy/LICENSE +0 -15
  293. data/node_modules/wrappy/README.md +0 -36
  294. data/node_modules/wrappy/package.json +0 -29
  295. data/node_modules/wrappy/wrappy.js +0 -33
  296. data/node_modules/ws/LICENSE +0 -21
  297. data/node_modules/ws/README.md +0 -496
  298. data/node_modules/ws/browser.js +0 -8
  299. data/node_modules/ws/index.js +0 -10
  300. data/node_modules/ws/lib/buffer-util.js +0 -129
  301. data/node_modules/ws/lib/constants.js +0 -10
  302. data/node_modules/ws/lib/event-target.js +0 -184
  303. data/node_modules/ws/lib/extension.js +0 -223
  304. data/node_modules/ws/lib/limiter.js +0 -55
  305. data/node_modules/ws/lib/permessage-deflate.js +0 -517
  306. data/node_modules/ws/lib/receiver.js +0 -507
  307. data/node_modules/ws/lib/sender.js +0 -405
  308. data/node_modules/ws/lib/stream.js +0 -165
  309. data/node_modules/ws/lib/validation.js +0 -104
  310. data/node_modules/ws/lib/websocket-server.js +0 -418
  311. data/node_modules/ws/lib/websocket.js +0 -942
  312. data/node_modules/ws/package.json +0 -56
  313. data/package-lock.json +0 -458
  314. data/package.json +0 -5
  315. data/selenium.log +0 -1
  316. data/spec.md +0 -6
  317. data/test.data +0 -2110
@@ -1,168 +0,0 @@
1
- // Licensed to the Software Freedom Conservancy (SFC) under one
2
- // or more contributor license agreements. See the NOTICE file
3
- // distributed with this work for additional information
4
- // regarding copyright ownership. The SFC licenses this file
5
- // to you under the Apache License, Version 2.0 (the
6
- // "License"); you may not use this file except in compliance
7
- // with the License. You may obtain a copy of the License at
8
- //
9
- // http://www.apache.org/licenses/LICENSE-2.0
10
- //
11
- // Unless required by applicable law or agreed to in writing,
12
- // software distributed under the License is distributed on an
13
- // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- // KIND, either express or implied. See the License for the
15
- // specific language governing permissions and limitations
16
- // under the License.
17
-
18
- /**
19
- * @fileoverview Defines a WebDriver client for Safari.
20
- */
21
-
22
- 'use strict'
23
-
24
- const http = require('./http')
25
- const io = require('./io')
26
- const remote = require('./remote')
27
- const webdriver = require('./lib/webdriver')
28
- const { Browser, Capabilities } = require('./lib/capabilities')
29
-
30
- /**
31
- * _Synchronously_ attempts to locate the IE driver executable on the current
32
- * system.
33
- *
34
- * @return {?string} the located executable, or `null`.
35
- */
36
- function locateSynchronously() {
37
- return process.platform === 'darwin'
38
- ? io.findInPath('safaridriver', true)
39
- : null
40
- }
41
-
42
- /**
43
- * @return {string} .
44
- * @throws {Error}
45
- */
46
- function findSafariDriver() {
47
- let exe = locateSynchronously()
48
- if (!exe) {
49
- throw Error(
50
- `The safaridriver executable could not be found on the current PATH.
51
- Please ensure you are using Safari 10.0 or above.`
52
- )
53
- }
54
- return exe
55
- }
56
-
57
- /**
58
- * Creates {@link selenium-webdriver/remote.DriverService} instances that manage
59
- * a [safaridriver] server in a child process.
60
- *
61
- * [safaridriver]: https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_0.html#//apple_ref/doc/uid/TP40014305-CH11-DontLinkElementID_28
62
- */
63
- class ServiceBuilder extends remote.DriverService.Builder {
64
- /**
65
- * @param {string=} opt_exe Path to the server executable to use. If omitted,
66
- * the builder will attempt to locate the safaridriver on the system PATH.
67
- */
68
- constructor(opt_exe) {
69
- super(opt_exe || findSafariDriver())
70
- this.setLoopback(true) // Required.
71
- }
72
- }
73
-
74
- const OPTIONS_CAPABILITY_KEY = 'safari.options'
75
- const TECHNOLOGY_PREVIEW_OPTIONS_KEY = 'technologyPreview'
76
-
77
- /**
78
- * Configuration options specific to the {@link Driver SafariDriver}.
79
- */
80
- class Options extends Capabilities {
81
- /**
82
- * @param {(Capabilities|Map<string, ?>|Object)=} other Another set of
83
- * capabilities to initialize this instance from.
84
- */
85
- constructor(other = undefined) {
86
- super(other)
87
-
88
- /** @private {!Object} */
89
- this.options_ = this.get(OPTIONS_CAPABILITY_KEY) || {}
90
-
91
- this.set(OPTIONS_CAPABILITY_KEY, this.options_)
92
- this.setBrowserName(Browser.SAFARI)
93
- }
94
-
95
- /**
96
- * Instruct the SafariDriver to use the Safari Technology Preview if true.
97
- * Otherwise, use the release version of Safari. Defaults to using the release version of Safari.
98
- *
99
- * @param {boolean} useTechnologyPreview
100
- * @return {!Options} A self reference.
101
- */
102
- setTechnologyPreview(useTechnologyPreview) {
103
- this.options_[TECHNOLOGY_PREVIEW_OPTIONS_KEY] = !!useTechnologyPreview
104
- return this
105
- }
106
- }
107
-
108
- /**
109
- * @param {(Capabilities|Object<string, *>)=} o The options object
110
- * @return {boolean}
111
- */
112
- function useTechnologyPreview(o) {
113
- if (o instanceof Capabilities) {
114
- let options = o.get(OPTIONS_CAPABILITY_KEY)
115
- return !!(options && options[TECHNOLOGY_PREVIEW_OPTIONS_KEY])
116
- }
117
-
118
- if (o && typeof o === 'object') {
119
- return !!o[TECHNOLOGY_PREVIEW_OPTIONS_KEY]
120
- }
121
-
122
- return false
123
- }
124
-
125
- const SAFARIDRIVER_TECHNOLOGY_PREVIEW_EXE =
126
- '/Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver'
127
-
128
- /**
129
- * A WebDriver client for Safari. This class should never be instantiated
130
- * directly; instead, use the {@linkplain ./builder.Builder Builder}:
131
- *
132
- * var driver = new Builder()
133
- * .forBrowser('safari')
134
- * .build();
135
- *
136
- */
137
- class Driver extends webdriver.WebDriver {
138
- /**
139
- * Creates a new Safari session.
140
- *
141
- * @param {(Options|Capabilities)=} options The configuration options.
142
- * @return {!Driver} A new driver instance.
143
- */
144
- static createSession(options) {
145
- let caps = options || new Options()
146
-
147
- let exe
148
- if (useTechnologyPreview(caps.get(OPTIONS_CAPABILITY_KEY))) {
149
- exe = SAFARIDRIVER_TECHNOLOGY_PREVIEW_EXE
150
- }
151
-
152
- let service = new ServiceBuilder(exe).build()
153
- let executor = new http.Executor(
154
- service.start().then((url) => new http.HttpClient(url))
155
- )
156
-
157
- return /** @type {!Driver} */ (super.createSession(executor, caps, () =>
158
- service.kill()
159
- ))
160
- }
161
- }
162
-
163
- // Public API
164
-
165
- exports.Driver = Driver
166
- exports.Options = Options
167
- exports.ServiceBuilder = ServiceBuilder
168
- exports.locateSynchronously = locateSynchronously
@@ -1,504 +0,0 @@
1
- // Licensed to the Software Freedom Conservancy (SFC) under one
2
- // or more contributor license agreements. See the NOTICE file
3
- // distributed with this work for additional information
4
- // regarding copyright ownership. The SFC licenses this file
5
- // to you under the Apache License, Version 2.0 (the
6
- // "License"); you may not use this file except in compliance
7
- // with the License. You may obtain a copy of the License at
8
- //
9
- // http://www.apache.org/licenses/LICENSE-2.0
10
- //
11
- // Unless required by applicable law or agreed to in writing,
12
- // software distributed under the License is distributed on an
13
- // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- // KIND, either express or implied. See the License for the
15
- // specific language governing permissions and limitations
16
- // under the License.
17
-
18
- /**
19
- * @fileoverview Provides extensions for
20
- * [Jasmine](https://jasmine.github.io) and [Mocha](https://mochajs.org).
21
- *
22
- * You may conditionally suppress a test function using the exported
23
- * "ignore" function. If the provided predicate returns true, the attached
24
- * test case will be skipped:
25
- *
26
- * test.ignore(maybe()).it('is flaky', function() {
27
- * if (Math.random() < 0.5) throw Error();
28
- * });
29
- *
30
- * function maybe() { return Math.random() < 0.5; }
31
- */
32
-
33
- 'use strict'
34
-
35
- const { isatty } = require('tty')
36
- const chrome = require('../chrome')
37
- const edge = require('../edge')
38
- const firefox = require('../firefox')
39
- const ie = require('../ie')
40
- const remote = require('../remote')
41
- const safari = require('../safari')
42
- const opera = require('../opera')
43
- const { Browser } = require('../lib/capabilities')
44
- const { Builder } = require('../index')
45
-
46
- /**
47
- * Describes a browser targeted by a {@linkplain suite test suite}.
48
- * @record
49
- */
50
- function TargetBrowser() { }
51
-
52
- /**
53
- * The {@linkplain Browser name} of the targeted browser.
54
- * @type {string}
55
- */
56
- TargetBrowser.prototype.name
57
-
58
- /**
59
- * The specific version of the targeted browser, if any.
60
- * @type {(string|undefined)}
61
- */
62
- TargetBrowser.prototype.version
63
-
64
- /**
65
- * The specific {@linkplain ../lib/capabilities.Platform platform} for the
66
- * targeted browser, if any.
67
- * @type {(string|undefined)}.
68
- */
69
- TargetBrowser.prototype.platform
70
-
71
- /** @suppress {checkTypes} */
72
- function color(c, s) {
73
- return isatty(process.stdout) ? `\u001b[${c}m${s}\u001b[0m` : s
74
- }
75
- function green(s) {
76
- return color(32, s)
77
- }
78
- function cyan(s) {
79
- return color(36, s)
80
- }
81
- function info(msg) {
82
- console.info(`${green('[INFO]')} ${msg}`)
83
- }
84
- function warn(msg) {
85
- console.warn(`${cyan('[WARNING]')} ${msg}`)
86
- }
87
-
88
- /**
89
- * Extracts the browsers for a test suite to target from the `SELENIUM_BROWSER`
90
- * environment variable.
91
- *
92
- * @return {!Array<!TargetBrowser>} the browsers to target.
93
- */
94
- function getBrowsersToTestFromEnv() {
95
- let browsers = process.env['SELENIUM_BROWSER']
96
- if (!browsers) {
97
- return []
98
- }
99
- return browsers.split(',').map((spec) => {
100
- const parts = spec.split(/:/, 3)
101
- let name = parts[0]
102
- if (name === 'ie') {
103
- name = Browser.INTERNET_EXPLORER
104
- } else if (name === 'edge') {
105
- name = Browser.EDGE
106
- }
107
- let version = parts[1]
108
- let platform = parts[2]
109
- return { name, version, platform }
110
- })
111
- }
112
-
113
- /**
114
- * @return {!Array<!TargetBrowser>} the browsers available for testing on this
115
- * system.
116
- */
117
- function getAvailableBrowsers() {
118
- info(`Searching for WebDriver executables installed on the current system...`)
119
-
120
- let targets = [
121
- [chrome.locateSynchronously, Browser.CHROME],
122
- [edge.locateSynchronously, Browser.EDGE],
123
- [firefox.locateSynchronously, Browser.FIREFOX],
124
- [ie.locateSynchronously, Browser.INTERNET_EXPLORER],
125
- [safari.locateSynchronously, Browser.SAFARI],
126
- [opera.locateSynchronously, Browser.OPERA],
127
- ]
128
-
129
- let availableBrowsers = []
130
- for (let pair of targets) {
131
- const fn = pair[0]
132
- const name = pair[1]
133
- const capabilities = pair[2]
134
- if (fn()) {
135
- info(`... located ${name}`)
136
- availableBrowsers.push({ name, capabilities })
137
- }
138
- }
139
-
140
- if (availableBrowsers.length === 0) {
141
- warn(`Unable to locate any WebDriver executables for testing`)
142
- }
143
-
144
- return availableBrowsers
145
- }
146
-
147
- let wasInit
148
- let targetBrowsers
149
- let seleniumJar
150
- let seleniumUrl
151
- let seleniumServer
152
-
153
- /**
154
- * Initializes this module by determining which browsers a
155
- * {@linkplain ./index.suite test suite} should run against. The default
156
- * behavior is to run tests against every browser with a WebDriver executables
157
- * (chromedriver, firefoxdriver, etc.) are installed on the system by `PATH`.
158
- *
159
- * Specific browsers can be selected at runtime by setting the
160
- * `SELENIUM_BROWSER` environment variable. This environment variable has the
161
- * same semantics as with the WebDriver {@link ../index.Builder Builder},
162
- * except you may use a comma-delimited list to run against multiple browsers:
163
- *
164
- * SELENIUM_BROWSER=chrome,firefox mocha --recursive tests/
165
- *
166
- * The `SELENIUM_REMOTE_URL` environment variable may be set to configure tests
167
- * to run against an externally managed (usually remote) Selenium server. When
168
- * set, the WebDriver builder provided by each
169
- * {@linkplain TestEnvironment#builder TestEnvironment} will automatically be
170
- * configured to use this server instead of starting a browser driver locally.
171
- *
172
- * The `SELENIUM_SERVER_JAR` environment variable may be set to the path of a
173
- * standalone Selenium server on the local machine that should be used for
174
- * WebDriver sessions. When set, the WebDriver builder provided by each
175
- * {@linkplain TestEnvironment} will automatically be configured to use the
176
- * started server instead of using a browser driver directly. It should only be
177
- * necessary to set the `SELENIUM_SERVER_JAR` when testing locally against
178
- * browsers not natively supported by the WebDriver
179
- * {@link ../index.Builder Builder}.
180
- *
181
- * When either of the `SELENIUM_REMOTE_URL` or `SELENIUM_SERVER_JAR` environment
182
- * variables are set, the `SELENIUM_BROWSER` variable must also be set.
183
- *
184
- * @param {boolean=} force whether to force this module to re-initialize and
185
- * scan `process.env` again to determine which browsers to run tests
186
- * against.
187
- */
188
- function init(force = false) {
189
- if (wasInit && !force) {
190
- return
191
- }
192
- wasInit = true
193
-
194
- // If force re-init, kill the current server if there is one.
195
- if (seleniumServer) {
196
- seleniumServer.kill()
197
- seleniumServer = null
198
- }
199
-
200
- seleniumJar = process.env['SELENIUM_SERVER_JAR']
201
- seleniumUrl = process.env['SELENIUM_REMOTE_URL']
202
- if (seleniumJar) {
203
- info(`Using Selenium server jar: ${seleniumJar}`)
204
- }
205
-
206
- if (seleniumUrl) {
207
- info(`Using Selenium remote end: ${seleniumUrl}`)
208
- }
209
-
210
- if (seleniumJar && seleniumUrl) {
211
- throw Error(
212
- 'Ambiguous test configuration: both SELENIUM_REMOTE_URL' +
213
- ' && SELENIUM_SERVER_JAR environment variables are set'
214
- )
215
- }
216
-
217
- const envBrowsers = getBrowsersToTestFromEnv()
218
- if ((seleniumJar || seleniumUrl) && envBrowsers.length === 0) {
219
- throw Error(
220
- 'Ambiguous test configuration: when either the SELENIUM_REMOTE_URL or' +
221
- ' SELENIUM_SERVER_JAR environment variable is set, the' +
222
- ' SELENIUM_BROWSER variable must also be set.'
223
- )
224
- }
225
-
226
- targetBrowsers = envBrowsers.length > 0 ? envBrowsers : getAvailableBrowsers()
227
- info(
228
- `Running tests against [${targetBrowsers.map((b) => b.name).join(', ')}]`
229
- )
230
-
231
- after(function () {
232
- if (seleniumServer) {
233
- return seleniumServer.kill()
234
- }
235
- })
236
- }
237
-
238
- const TARGET_MAP = /** !WeakMap<!Environment, !TargetBrowser> */ new WeakMap()
239
- const URL_MAP = /** !WeakMap<!Environment, ?(string|remote.SeleniumServer)> */ new WeakMap()
240
-
241
- /**
242
- * Defines the environment a {@linkplain suite test suite} is running against.
243
- * @final
244
- */
245
- class Environment {
246
- /**
247
- * @param {!TargetBrowser} browser the browser targetted in this environment.
248
- * @param {?(string|remote.SeleniumServer)=} url remote URL of an existing
249
- * Selenium server to test against.
250
- */
251
- constructor(browser, url = undefined) {
252
- browser = /** @type {!TargetBrowser} */ (Object.seal(
253
- Object.assign({}, browser)
254
- ))
255
-
256
- TARGET_MAP.set(this, browser)
257
- URL_MAP.set(this, url || null)
258
- }
259
-
260
- /** @return {!TargetBrowser} the target browser for this test environment. */
261
- get browser() {
262
- return TARGET_MAP.get(this)
263
- }
264
-
265
- /**
266
- * Returns a predicate function that will suppress tests in this environment
267
- * if the {@linkplain #browser current browser} is in the list of
268
- * `browsersToIgnore`.
269
- *
270
- * @param {...(string|!Browser)} browsersToIgnore the browsers that should
271
- * be ignored.
272
- * @return {function(): boolean} a new predicate function.
273
- */
274
- browsers(...browsersToIgnore) {
275
- return () => browsersToIgnore.indexOf(this.browser.name) != -1
276
- }
277
-
278
- /**
279
- * @return {!Builder} a new WebDriver builder configured to target this
280
- * environment's {@linkplain #browser browser}.
281
- */
282
- builder() {
283
- const browser = this.browser
284
- const urlOrServer = URL_MAP.get(this)
285
-
286
- const builder = new Builder()
287
- builder.disableEnvironmentOverrides()
288
-
289
- const realBuild = builder.build
290
- builder.build = function () {
291
-
292
- builder.forBrowser(browser.name, browser.version, browser.platform)
293
-
294
- if (browser.capabilities) {
295
- builder.getCapabilities().merge(browser.capabilities)
296
- }
297
-
298
- if (typeof urlOrServer === 'string') {
299
- builder.usingServer(urlOrServer)
300
- } else if (urlOrServer) {
301
- builder.usingServer(urlOrServer.address())
302
- }
303
- return realBuild.call(builder)
304
- }
305
-
306
- return builder
307
- }
308
- }
309
-
310
- /**
311
- * Configuration options for a {@linkplain ./index.suite test suite}.
312
- * @record
313
- */
314
- function SuiteOptions() { }
315
-
316
- /**
317
- * The browsers to run the test suite against.
318
- * @type {!Array<!(Browser|TargetBrowser)>}
319
- */
320
- SuiteOptions.prototype.browsers
321
-
322
- let inSuite = false
323
-
324
- /**
325
- * Defines a test suite by calling the provided function once for each of the
326
- * target browsers. If a suite is not limited to a specific set of browsers in
327
- * the provided {@linkplain ./index.SuiteOptions suite options}, the suite will
328
- * be configured to run against each of the {@linkplain ./index.init runtime
329
- * target browsers}.
330
- *
331
- * Sample usage:
332
- *
333
- * const {By, Key, until} = require('selenium-webdriver');
334
- * const {suite} = require('selenium-webdriver/testing');
335
- *
336
- * suite(function(env) {
337
- * describe('Google Search', function() {
338
- * let driver;
339
- *
340
- * before(async function() {
341
- * driver = await env.builder().build();
342
- * });
343
- *
344
- * after(() => driver.quit());
345
- *
346
- * it('demo', async function() {
347
- * await driver.get('http://www.google.com/ncr');
348
- *
349
- * let q = await driver.findElement(By.name('q'));
350
- * await q.sendKeys('webdriver', Key.RETURN);
351
- * await driver.wait(
352
- * until.titleIs('webdriver - Google Search'), 1000);
353
- * });
354
- * });
355
- * });
356
- *
357
- * By default, this example suite will run against every WebDriver-enabled
358
- * browser on the current system. Alternatively, the `SELENIUM_BROWSER`
359
- * environment variable may be used to run against a specific browser:
360
- *
361
- * SELENIUM_BROWSER=firefox mocha -t 120000 example_test.js
362
- *
363
- * @param {function(!Environment)} fn the function to call to build the test
364
- * suite.
365
- * @param {SuiteOptions=} options configuration options.
366
- */
367
- function suite(fn, options = undefined) {
368
- if (inSuite) {
369
- throw Error('Calls to suite() may not be nested')
370
- }
371
- try {
372
- init()
373
- inSuite = true
374
-
375
- const suiteBrowsers = new Map()
376
- if (options && options.browsers) {
377
- for (let browser of options.browsers) {
378
- if (typeof browser === 'string') {
379
- suiteBrowsers.set(browser, { name: browser })
380
- } else {
381
- suiteBrowsers.set(browser.name, browser)
382
- }
383
- }
384
- }
385
-
386
- for (let browser of targetBrowsers) {
387
- if (suiteBrowsers.size > 0 && !suiteBrowsers.has(browser.name)) {
388
- continue
389
- }
390
-
391
- describe(`[${browser.name}]`, function () {
392
- if (!seleniumUrl && seleniumJar && !seleniumServer) {
393
- seleniumServer = new remote.SeleniumServer(seleniumJar)
394
-
395
- const startTimeout = 65 * 1000
396
- // eslint-disable-next-line no-inner-declarations
397
- function startSelenium() {
398
- if (typeof this.timeout === 'function') {
399
- this.timeout(startTimeout) // For mocha.
400
- }
401
-
402
- info(`Starting selenium server ${seleniumJar}`)
403
- return seleniumServer.start(60 * 1000)
404
- }
405
-
406
- const /** !Function */ beforeHook = global.beforeAll || global.before
407
- beforeHook(startSelenium, startTimeout)
408
- }
409
-
410
- fn(new Environment(browser, seleniumUrl || seleniumServer))
411
- })
412
- }
413
- } finally {
414
- inSuite = false
415
- }
416
- }
417
-
418
- /**
419
- * Returns an object with wrappers for the standard mocha/jasmine test
420
- * functions: `describe` and `it`, which will redirect to `xdescribe` and `xit`,
421
- * respectively, if provided predicate function returns false.
422
- *
423
- * Sample usage:
424
- *
425
- * const {Browser} = require('selenium-webdriver');
426
- * const {suite, ignore} = require('selenium-webdriver/testing');
427
- *
428
- * suite(function(env) {
429
- *
430
- * // Skip tests the current environment targets Chrome.
431
- * ignore(env.browsers(Browser.CHROME)).
432
- * describe('something', async function() {
433
- * let driver = await env.builder().build();
434
- * // etc.
435
- * });
436
- * });
437
- *
438
- * @param {function(): boolean} predicateFn A predicate to call to determine
439
- * if the test should be suppressed. This function MUST be synchronous.
440
- * @return {{describe: !Function, it: !Function}} an object with wrapped
441
- * versions of the `describe` and `it` wtest functions.
442
- */
443
- function ignore(predicateFn) {
444
- const isJasmine = global.jasmine && typeof global.jasmine === 'object'
445
-
446
- const hooks = {
447
- describe: getTestHook('describe'),
448
- xdescribe: getTestHook('xdescribe'),
449
- it: getTestHook('it'),
450
- xit: getTestHook('xit'),
451
- }
452
- hooks.fdescribe = isJasmine ? getTestHook('fdescribe') : hooks.describe.only
453
- hooks.fit = isJasmine ? getTestHook('fit') : hooks.it.only
454
-
455
- let describe = wrap(hooks.xdescribe, hooks.describe)
456
- let fdescribe = wrap(hooks.xdescribe, hooks.fdescribe)
457
- //eslint-disable-next-line no-only-tests/no-only-tests
458
- describe.only = fdescribe
459
-
460
- let it = wrap(hooks.xit, hooks.it)
461
- let fit = wrap(hooks.xit, hooks.fit)
462
- //eslint-disable-next-line no-only-tests/no-only-tests
463
- it.only = fit
464
-
465
- return { describe, it }
466
-
467
- function wrap(onSkip, onRun) {
468
- return function (...args) {
469
- if (predicateFn()) {
470
- onSkip(...args)
471
- } else {
472
- onRun(...args)
473
- }
474
- }
475
- }
476
- }
477
-
478
- /**
479
- * @param {string} name
480
- * @return {!Function}
481
- * @throws {TypeError}
482
- */
483
- function getTestHook(name) {
484
- let fn = global[name]
485
- let type = typeof fn
486
- if (type !== 'function') {
487
- throw TypeError(
488
- `Expected global.${name} to be a function, but is ${type}.` +
489
- ' This can happen if you try using this module when running with' +
490
- ' node directly instead of using jasmine or mocha'
491
- )
492
- }
493
- return fn
494
- }
495
-
496
- // PUBLIC API
497
-
498
- module.exports = {
499
- Environment,
500
- SuiteOptions,
501
- init,
502
- ignore,
503
- suite,
504
- }