Skip to content

Commit 96aaafd

Browse files
committed
feat: web api service can now use both Chrome and Firefox based on availability
1 parent 0a76bfe commit 96aaafd

File tree

2 files changed

+39
-8
lines changed

2 files changed

+39
-8
lines changed

fxgl-intelligence/src/main/kotlin/com/almasb/fxgl/intelligence/WebAPIService.kt

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import javafx.beans.property.ReadOnlyBooleanWrapper
1515
import org.openqa.selenium.WebDriver
1616
import org.openqa.selenium.chrome.ChromeDriver
1717
import org.openqa.selenium.chrome.ChromeOptions
18+
import org.openqa.selenium.firefox.FirefoxDriver
19+
import org.openqa.selenium.firefox.FirefoxOptions
1820

1921
/**
2022
* Provides access to JS-driven implementation.
@@ -65,21 +67,50 @@ abstract class WebAPIService(server: LocalWebSocketServer, private val apiURL: S
6567
stop()
6668
}
6769

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)
7471

7572
onWebDriverLoaded(webDriver!!)
7673
} 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.")
7875
log.warning("Error data", e)
7976
}
8077
}
8178
}
8279

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+
83114
/**
84115
* Stops this service.
85116
* No-op if it has not started via start() before.

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
<attach.version>4.0.17</attach.version>
9696
<jackson.version>2.14.2</jackson.version>
9797
<websocket.version>1.5.5</websocket.version>
98-
<selenium.version>4.17.0</selenium.version>
98+
<selenium.version>4.18.1</selenium.version>
9999
<slf4j.version>2.0.6</slf4j.version>
100100

101101
<!-- test dependencies -->

0 commit comments

Comments
 (0)