Skip to content

Microsoft Edge Browser Support + Failed Tests Fix #17

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
May 24, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ crossScalaVersions := List("2.10.7", "2.11.12", "2.12.15", "2.13.8", "3.1.2")

libraryDependencies ++= Seq(
"org.scalatest" %% "scalatest-core" % "3.2.12",
"org.seleniumhq.selenium" % "selenium-java" % "4.1.2",
"org.seleniumhq.selenium" % "htmlunit-driver" % "3.60.0",
"org.seleniumhq.selenium" % "selenium-java" % "4.1.4",
"org.seleniumhq.selenium" % "htmlunit-driver" % "3.61.0",
"org.eclipse.jetty" % "jetty-webapp" % "9.4.44.v20210927" % Test,
"org.scalatest" %% "scalatest-funspec" % "3.2.12" % Test,
"org.scalatest" %% "scalatest-shouldmatchers" % "3.2.12" % Test
Expand All @@ -54,11 +54,11 @@ pomPostProcess := { (node: XmlNode) =>
}).transform(node).head
}

Test / testOptions :=
/*Test / testOptions :=
Seq(
Tests.Argument(TestFrameworks.ScalaTest,
"-l", "org.scalatest.tags.Slow"
))
))*/

enablePlugins(SbtOsgi)

Expand Down
25 changes: 25 additions & 0 deletions src/main/scala/org/scalatestplus/selenium/WebBrowser.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import org.openqa.selenium.safari.SafariDriver
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.ie.InternetExplorerDriver
import org.openqa.selenium.htmlunit.HtmlUnitDriver
import org.openqa.selenium.edge.EdgeDriver
import org.openqa.selenium.By
import org.openqa.selenium.WebElement
import java.util.concurrent.TimeUnit
Expand Down Expand Up @@ -4758,6 +4759,30 @@ trait InternetExplorer extends WebBrowser with Driver with ScreenshotCapturer {
*/
object InternetExplorer extends InternetExplorer

/**
* <code>WebBrowser</code> subtrait that defines an implicit <code>WebDriver</code> for Microsoft Edge (an <code>org.openqa.selenium.edge.EdgeDriver</code>).
*/
trait Edge extends WebBrowser with Driver with ScreenshotCapturer {
/**
* <code>WebBrowser</code> subtrait that defines an implicit <code>WebDriver</code> for Safari (an <code>org.openqa.selenium.safari.SafariDriver</code>).
*/
implicit val webDriver = new EdgeDriver()

/**
* Captures a screenshot and saves it as a file in the specified directory.
*/
def captureScreenshot(directory: String): Unit = {
capture toDir directory
}
}

/**
* Companion object that facilitates the importing of <code>Edge</code> members as
* an alternative to mixing it in. One use case is to import <code>Edge</code> members so you can use
* them in the Scala interpreter.
*/
object Edge extends Edge

/*
* <p>
* 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
Expand Down
40 changes: 27 additions & 13 deletions src/test/scala/org/scalatestplus/selenium/DriverSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@ package org.scalatestplus.selenium

import org.scalatest._
import SharedHelpers.EventRecordingReporter
import org.openqa.selenium.firefox.{FirefoxDriver, FirefoxOptions}
import org.openqa.selenium.safari.SafariDriver
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.ie.InternetExplorerDriver
import org.scalatest.tagobjects.Slow

class DriverSpec extends funspec.AnyFunSpec {
Expand All @@ -18,7 +14,7 @@ class DriverSpec extends funspec.AnyFunSpec {

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

class GoogleSearchSpecWithChrome extends GoogleSearchSpec with Chrome
class GoogleSearchSpecWithFirefox extends GoogleSearchSpec with Firefox
class GoogleSearchSpecWithInternetExplorer extends GoogleSearchSpec with InternetExplorer
class GoogleSearchSpecWithSafari extends GoogleSearchSpec with Safari
class GoogleSearchSpecWithEdge extends GoogleSearchSpec with Edge

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

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

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

it("should work with Safari", Slow) {
// Cancel when Safari is not available
try new SafariDriver catch { case e: Throwable => cancel(e) }
val s = new GoogleSearchSpecWithFirefox
val s = try new GoogleSearchSpecWithSafari catch { case e: Throwable => cancel(e) }
val rep = new EventRecordingReporter
s.run(None, Args(reporter = rep))
val scopeOpenedList = rep.scopeOpenedEventsReceived
assert(scopeOpenedList.size == 1)
assert(scopeOpenedList(0).message == "google.com")
val scopeClosedList = rep.scopeClosedEventsReceived
assert(scopeClosedList.size == 1)
assert(scopeClosedList(0).message == "google.com")
val testStartingList = rep.testStartingEventsReceived
assert(testStartingList.size == 1)
assert(testStartingList(0).testName == "google.com should change its title based on the term searched")
val testSucceededList = rep.testSucceededEventsReceived
assert(testSucceededList.size == 1)
assert(testSucceededList(0).testName == "google.com should change its title based on the term searched")
}

it("should work with Microsoft Edge", Slow) {
// Cancel when Microsoft Edge is not available
val s = try new GoogleSearchSpecWithEdge catch { case e: Throwable => cancel(e) }
val rep = new EventRecordingReporter
s.run(None, Args(reporter = rep))
val scopeOpenedList = rep.scopeOpenedEventsReceived
Expand Down
23 changes: 15 additions & 8 deletions src/test/scala/org/scalatestplus/selenium/WebBrowserSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1983,18 +1983,25 @@ class WebBrowserSpec extends JettySpec with matchers.should.Matchers with SpanSu
import org.scalatest.prop.TableDrivenPropertyChecks._
import org.scalatest.prop.TableFor1
// Chrome requires a system property, InternetExplorer only works on Windows
val examples: TableFor1[WebBrowser with Driver] = {
val availableDrivers: List[WebBrowser with Driver] =
val availableDrivers: List[WebBrowser with Driver] =
List(
try List(Chrome) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
try List(Firefox) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
List(HtmlUnit),
try List(InternetExplorer) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
try List(Safari) catch { case _: Throwable => List.empty[WebBrowser with Driver] }
try List(new Chrome {}) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
try List(new Firefox {}) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
List(new HtmlUnit {}),
try List(new InternetExplorer {}) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
try List(new Safari {}) catch { case _: Throwable => List.empty[WebBrowser with Driver] },
try List(new Edge {}) catch { case _: Throwable => List.empty[WebBrowser with Driver] }
).flatten
val examples: TableFor1[WebBrowser with Driver] =
Table("web browser", availableDrivers: _*)
try {
forAll (examples) { d =>
d shouldBe a [Driver]
}
} finally {
availableDrivers.foreach(d => d.close()(d.webDriver))
}
forAll (examples) { d => d shouldBe a [Driver] }

}
}
describe("Page trait") {
Expand Down
7 changes: 2 additions & 5 deletions webapp/frame.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,8 @@
<title>Test Title</title>
</head>
<body>

<frameset cols="25%,50%,25%">
<frame id="frame1" src="index.html" />
<frame id="frame2" src="textfield.html" />
</frameset>
<iframe id="frame1" src="index.html"></iframe>
<iframe id="frame2" src="textfield.html"></iframe>

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

Expand Down
6 changes: 2 additions & 4 deletions webapp/textarea.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@
</head>
<body>

<textarea id="area1">
</textarea>
<textarea id="area1"></textarea>

<textarea name="area2">
</textarea>
<textarea name="area2"></textarea>

</body>
</html>