Skip to content

Commit 7ed187e

Browse files
authored
Merge pull request #17 from scalatest/feature-edge-browser
Microsoft Edge Browser Support + Failed Tests Fix
2 parents 81d9f89 + 1bfc7df commit 7ed187e

File tree

6 files changed

+75
-34
lines changed

6 files changed

+75
-34
lines changed

build.sbt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ crossScalaVersions := List("2.10.7", "2.11.12", "2.12.15", "2.13.8", "3.1.2")
3131

3232
libraryDependencies ++= Seq(
3333
"org.scalatest" %% "scalatest-core" % "3.2.12",
34-
"org.seleniumhq.selenium" % "selenium-java" % "4.1.2",
35-
"org.seleniumhq.selenium" % "htmlunit-driver" % "3.60.0",
34+
"org.seleniumhq.selenium" % "selenium-java" % "4.1.4",
35+
"org.seleniumhq.selenium" % "htmlunit-driver" % "3.61.0",
3636
"org.eclipse.jetty" % "jetty-webapp" % "9.4.44.v20210927" % Test,
3737
"org.scalatest" %% "scalatest-funspec" % "3.2.12" % Test,
3838
"org.scalatest" %% "scalatest-shouldmatchers" % "3.2.12" % Test
@@ -54,11 +54,11 @@ pomPostProcess := { (node: XmlNode) =>
5454
}).transform(node).head
5555
}
5656

57-
Test / testOptions :=
57+
/*Test / testOptions :=
5858
Seq(
5959
Tests.Argument(TestFrameworks.ScalaTest,
6060
"-l", "org.scalatest.tags.Slow"
61-
))
61+
))*/
6262

6363
enablePlugins(SbtOsgi)
6464

src/main/scala/org/scalatestplus/selenium/WebBrowser.scala

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import org.openqa.selenium.safari.SafariDriver
2121
import org.openqa.selenium.chrome.ChromeDriver
2222
import org.openqa.selenium.ie.InternetExplorerDriver
2323
import org.openqa.selenium.htmlunit.HtmlUnitDriver
24+
import org.openqa.selenium.edge.EdgeDriver
2425
import org.openqa.selenium.By
2526
import org.openqa.selenium.WebElement
2627
import java.util.concurrent.TimeUnit
@@ -4758,6 +4759,30 @@ trait InternetExplorer extends WebBrowser with Driver with ScreenshotCapturer {
47584759
*/
47594760
object InternetExplorer extends InternetExplorer
47604761

4762+
/**
4763+
* <code>WebBrowser</code> subtrait that defines an implicit <code>WebDriver</code> for Microsoft Edge (an <code>org.openqa.selenium.edge.EdgeDriver</code>).
4764+
*/
4765+
trait Edge extends WebBrowser with Driver with ScreenshotCapturer {
4766+
/**
4767+
* <code>WebBrowser</code> subtrait that defines an implicit <code>WebDriver</code> for Safari (an <code>org.openqa.selenium.safari.SafariDriver</code>).
4768+
*/
4769+
implicit val webDriver = new EdgeDriver()
4770+
4771+
/**
4772+
* Captures a screenshot and saves it as a file in the specified directory.
4773+
*/
4774+
def captureScreenshot(directory: String): Unit = {
4775+
capture toDir directory
4776+
}
4777+
}
4778+
4779+
/**
4780+
* Companion object that facilitates the importing of <code>Edge</code> members as
4781+
* an alternative to mixing it in. One use case is to import <code>Edge</code> members so you can use
4782+
* them in the Scala interpreter.
4783+
*/
4784+
object Edge extends Edge
4785+
47614786
/*
47624787
* <p>
47634788
* If you mix in <a href="../ScreenshotOnFailure.html"><code>ScreenshotOnFailure</code></a>, ScalaTest will capture a screenshot and store it to either the system temp directory

src/test/scala/org/scalatestplus/selenium/DriverSpec.scala

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ package org.scalatestplus.selenium
22

33
import org.scalatest._
44
import SharedHelpers.EventRecordingReporter
5-
import org.openqa.selenium.firefox.{FirefoxDriver, FirefoxOptions}
6-
import org.openqa.selenium.safari.SafariDriver
7-
import org.openqa.selenium.chrome.ChromeDriver
8-
import org.openqa.selenium.ie.InternetExplorerDriver
95
import org.scalatest.tagobjects.Slow
106

117
class DriverSpec extends funspec.AnyFunSpec {
@@ -18,7 +14,7 @@ class DriverSpec extends funspec.AnyFunSpec {
1814

1915
it("should change its title based on the term searched") {
2016
// Cancel test when cannot access google.com
21-
try goTo("http://www.google.com") catch { case e: Throwable => cancel(e) }
17+
try goTo("https://www.google.com") catch { case e: Throwable => cancel(e) }
2218
try {
2319
clickOn("q")
2420
textField("q").value = "Cheese!"
@@ -35,11 +31,13 @@ class DriverSpec extends funspec.AnyFunSpec {
3531

3632
class GoogleSearchSpecWithChrome extends GoogleSearchSpec with Chrome
3733
class GoogleSearchSpecWithFirefox extends GoogleSearchSpec with Firefox
34+
class GoogleSearchSpecWithInternetExplorer extends GoogleSearchSpec with InternetExplorer
35+
class GoogleSearchSpecWithSafari extends GoogleSearchSpec with Safari
36+
class GoogleSearchSpecWithEdge extends GoogleSearchSpec with Edge
3837

3938
it("should work with Chrome", Slow) {
4039
// Cancel when Chrome is not available
41-
try new ChromeDriver catch { case e: Throwable => cancel(e) }
42-
val s = new GoogleSearchSpecWithChrome
40+
val s = try new GoogleSearchSpecWithChrome catch { case e: Throwable => cancel(e) }
4341
val rep = new EventRecordingReporter
4442
s.run(None, Args(reporter = rep))
4543
val scopeOpenedList = rep.scopeOpenedEventsReceived
@@ -58,8 +56,7 @@ class DriverSpec extends funspec.AnyFunSpec {
5856

5957
it("should work with Firefox", Slow) {
6058
// Cancel when Firefox is not available
61-
try new FirefoxDriver(new FirefoxOptions) catch { case e: Throwable => cancel(e) }
62-
val s = new GoogleSearchSpecWithFirefox
59+
val s = try new GoogleSearchSpecWithFirefox catch { case e: Throwable => cancel(e) }
6360
val rep = new EventRecordingReporter
6461
s.run(None, Args(reporter = rep))
6562
val scopeOpenedList = rep.scopeOpenedEventsReceived
@@ -78,8 +75,7 @@ class DriverSpec extends funspec.AnyFunSpec {
7875

7976
it("should work with Internet Explorer", Slow) {
8077
// Cancel when Internet Explorer is not available
81-
try new InternetExplorerDriver catch { case e: Throwable => cancel(e) }
82-
val s = new GoogleSearchSpecWithFirefox
78+
val s = try new GoogleSearchSpecWithInternetExplorer catch { case e: Throwable => cancel(e) }
8379
val rep = new EventRecordingReporter
8480
s.run(None, Args(reporter = rep))
8581
val scopeOpenedList = rep.scopeOpenedEventsReceived
@@ -98,8 +94,26 @@ class DriverSpec extends funspec.AnyFunSpec {
9894

9995
it("should work with Safari", Slow) {
10096
// Cancel when Safari is not available
101-
try new SafariDriver catch { case e: Throwable => cancel(e) }
102-
val s = new GoogleSearchSpecWithFirefox
97+
val s = try new GoogleSearchSpecWithSafari catch { case e: Throwable => cancel(e) }
98+
val rep = new EventRecordingReporter
99+
s.run(None, Args(reporter = rep))
100+
val scopeOpenedList = rep.scopeOpenedEventsReceived
101+
assert(scopeOpenedList.size == 1)
102+
assert(scopeOpenedList(0).message == "google.com")
103+
val scopeClosedList = rep.scopeClosedEventsReceived
104+
assert(scopeClosedList.size == 1)
105+
assert(scopeClosedList(0).message == "google.com")
106+
val testStartingList = rep.testStartingEventsReceived
107+
assert(testStartingList.size == 1)
108+
assert(testStartingList(0).testName == "google.com should change its title based on the term searched")
109+
val testSucceededList = rep.testSucceededEventsReceived
110+
assert(testSucceededList.size == 1)
111+
assert(testSucceededList(0).testName == "google.com should change its title based on the term searched")
112+
}
113+
114+
it("should work with Microsoft Edge", Slow) {
115+
// Cancel when Microsoft Edge is not available
116+
val s = try new GoogleSearchSpecWithEdge catch { case e: Throwable => cancel(e) }
103117
val rep = new EventRecordingReporter
104118
s.run(None, Args(reporter = rep))
105119
val scopeOpenedList = rep.scopeOpenedEventsReceived

src/test/scala/org/scalatestplus/selenium/WebBrowserSpec.scala

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1983,18 +1983,25 @@ class WebBrowserSpec extends JettySpec with matchers.should.Matchers with SpanSu
19831983
import org.scalatest.prop.TableDrivenPropertyChecks._
19841984
import org.scalatest.prop.TableFor1
19851985
// Chrome requires a system property, InternetExplorer only works on Windows
1986-
val examples: TableFor1[WebBrowser with Driver] = {
1987-
val availableDrivers: List[WebBrowser with Driver] =
1986+
val availableDrivers: List[WebBrowser with Driver] =
19881987
List(
1989-
try List(Chrome) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
1990-
try List(Firefox) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
1991-
List(HtmlUnit),
1992-
try List(InternetExplorer) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
1993-
try List(Safari) catch { case _: Throwable => List.empty[WebBrowser with Driver] }
1988+
try List(new Chrome {}) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
1989+
try List(new Firefox {}) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
1990+
List(new HtmlUnit {}),
1991+
try List(new InternetExplorer {}) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
1992+
try List(new Safari {}) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
1993+
try List(new Edge {}) catch { case _: Throwable => List.empty[WebBrowser with Driver] }
19941994
).flatten
1995+
val examples: TableFor1[WebBrowser with Driver] =
19951996
Table("web browser", availableDrivers: _*)
1997+
try {
1998+
forAll (examples) { d =>
1999+
d shouldBe a [Driver]
2000+
}
2001+
} finally {
2002+
availableDrivers.foreach(d => d.close()(d.webDriver))
19962003
}
1997-
forAll (examples) { d => d shouldBe a [Driver] }
2004+
19982005
}
19992006
}
20002007
describe("Page trait") {

webapp/frame.html

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@
33
<title>Test Title</title>
44
</head>
55
<body>
6-
7-
<frameset cols="25%,50%,25%">
8-
<frame id="frame1" src="index.html" />
9-
<frame id="frame2" src="textfield.html" />
10-
</frameset>
6+
<iframe id="frame1" src="index.html"></iframe>
7+
<iframe id="frame2" src="textfield.html"></iframe>
118

129
<input id="text1" type="text" value="" />
1310

webapp/textarea.html

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
</head>
55
<body>
66

7-
<textarea id="area1">
8-
</textarea>
7+
<textarea id="area1"></textarea>
98

10-
<textarea name="area2">
11-
</textarea>
9+
<textarea name="area2"></textarea>
1210

1311
</body>
1412
</html>

0 commit comments

Comments
 (0)