1
1
package org .scalajs .jsenv .selenium
2
2
3
- import org .openqa .selenium ._
4
- import org .openqa .selenium .remote .DesiredCapabilities
5
- import org .openqa .selenium .remote .server ._
6
3
7
4
import org .scalajs .jsenv ._
8
5
9
6
import java .net .URL
10
7
import java .nio .file .{Path , Paths }
8
+ import org .openqa .selenium .Capabilities
9
+ import org .openqa .selenium .remote .DesiredCapabilities
10
+ import org .openqa .selenium .WebDriver
11
+ import org .openqa .selenium .JavascriptExecutor
12
+ import org .openqa .selenium .Platform
13
+ import SeleniumJSEnv .DriverFactory
11
14
12
- final class SeleniumJSEnv (capabilities : Capabilities , config : SeleniumJSEnv .Config ) extends JSEnv {
13
- def this (capabilities : Capabilities ) =
14
- this (capabilities, SeleniumJSEnv .Config ())
15
-
16
- private val augmentedCapabilities = {
17
- val x = new DesiredCapabilities (capabilities)
18
- x.setJavascriptEnabled(true )
19
- x
20
- }
15
+ final class SeleniumJSEnv (driverFactory : DriverFactory , config : SeleniumJSEnv .Config ) extends JSEnv {
21
16
22
- val name : String = s " SeleniumJSEnv ( $capabilities ) "
17
+ val name : String = s " SeleniumJSEnv ( $config ) "
23
18
24
19
def start (input : Seq [Input ], runConfig : RunConfig ): JSRun =
25
20
SeleniumRun .start(newDriver _, input, config, runConfig)
@@ -29,7 +24,7 @@ final class SeleniumJSEnv(capabilities: Capabilities, config: SeleniumJSEnv.Conf
29
24
30
25
private def newDriver () = {
31
26
val driver : WebDriver =
32
- config. driverFactory.newInstance(augmentedCapabilities )
27
+ driverFactory( )
33
28
34
29
/* The first `asInstanceOf`s are a fail-fast for the second one, which
35
30
* scalac partially erases, so that we're sure right now that the last
@@ -43,20 +38,22 @@ final class SeleniumJSEnv(capabilities: Capabilities, config: SeleniumJSEnv.Conf
43
38
44
39
driver.asInstanceOf [WebDriver with JavascriptExecutor ]
45
40
}
41
+
42
+ def this (driverFactory : DriverFactory ) = this (driverFactory, SeleniumJSEnv .Config ())
46
43
}
47
44
48
45
object SeleniumJSEnv {
46
+ type DriverFactory = () => WebDriver
47
+
49
48
final class Config private (
50
- val driverFactory : DriverFactory ,
51
49
val keepAlive : Boolean ,
52
50
val materialization : Config .Materialization
53
51
) {
54
52
import Config .Materialization
55
53
56
54
private def this () = this (
57
55
keepAlive = false ,
58
- materialization = Config .Materialization .Temp ,
59
- driverFactory = new DefaultDriverFactory (Platform .getCurrent()))
56
+ materialization = Config .Materialization .Temp )
60
57
61
58
/** Materializes purely virtual files into a temp directory.
62
59
*
@@ -113,13 +110,9 @@ object SeleniumJSEnv {
113
110
def withKeepAlive (keepAlive : Boolean ): Config =
114
111
copy(keepAlive = keepAlive)
115
112
116
- def withDriverFactory (driverFactory : DriverFactory ): Config =
117
- copy(driverFactory = driverFactory)
118
-
119
113
private def copy (keepAlive : Boolean = keepAlive,
120
- materialization : Config .Materialization = materialization,
121
- driverFactory : DriverFactory = driverFactory) = {
122
- new Config (driverFactory, keepAlive, materialization)
114
+ materialization : Config .Materialization = materialization) = {
115
+ new Config (keepAlive, materialization)
123
116
}
124
117
}
125
118
0 commit comments