@@ -15,6 +15,8 @@ import javafx.beans.property.ReadOnlyBooleanWrapper
15
15
import org.openqa.selenium.WebDriver
16
16
import org.openqa.selenium.chrome.ChromeDriver
17
17
import org.openqa.selenium.chrome.ChromeOptions
18
+ import org.openqa.selenium.firefox.FirefoxDriver
19
+ import org.openqa.selenium.firefox.FirefoxOptions
18
20
19
21
/* *
20
22
* Provides access to JS-driven implementation.
@@ -65,21 +67,50 @@ abstract class WebAPIService(server: LocalWebSocketServer, private val apiURL: S
65
67
stop()
66
68
}
67
69
68
- val options = ChromeOptions ()
69
- options.addArguments(" --headless=new" )
70
- options.addArguments(" --use-fake-ui-for-media-stream" )
71
-
72
- webDriver = ChromeDriver (options)
73
- webDriver!! .get(apiURL)
70
+ webDriver = loadWebDriverAndPage(apiURL)
74
71
75
72
onWebDriverLoaded(webDriver!! )
76
73
} catch (e: Exception ) {
77
- log.warning(" Failed to start Chrome web driver. Ensure Chrome is installed in default location " )
74
+ log.warning(" Failed to start web driver." )
78
75
log.warning(" Error data" , e)
79
76
}
80
77
}
81
78
}
82
79
80
+ private fun loadWebDriverAndPage (url : String ): WebDriver {
81
+ val driverSuppliers = listOf (
82
+ { loadChromeDriver() },
83
+ { loadFirefoxDriver() }
84
+ )
85
+
86
+ driverSuppliers.forEach { supplier ->
87
+ try {
88
+ val driver = supplier()
89
+ driver.get(url)
90
+ return driver
91
+ } catch (e: Exception ) {
92
+ log.warning(" Failed to load web driver/page. Ensure Chrome or Firefox is installed in default location" , e)
93
+ }
94
+ }
95
+
96
+ throw RuntimeException (" No valid driver was able to load: $url " )
97
+ }
98
+
99
+ private fun loadFirefoxDriver (): WebDriver {
100
+ val options = FirefoxOptions ()
101
+ options.addArguments(" --headless" )
102
+
103
+ return FirefoxDriver (options)
104
+ }
105
+
106
+ private fun loadChromeDriver (): WebDriver {
107
+ val options = ChromeOptions ()
108
+ options.addArguments(" --headless=new" )
109
+ options.addArguments(" --use-fake-ui-for-media-stream" )
110
+
111
+ return ChromeDriver (options)
112
+ }
113
+
83
114
/* *
84
115
* Stops this service.
85
116
* No-op if it has not started via start() before.
0 commit comments