diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 35f968ac..2b26fa10 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -144,3 +144,7 @@
#### 0.9.26 - June 1 2015
* Fixed bug where after wouldn't run following a failed test [Issue #197](https://github.com/lefthandedgoat/canopy/issues/197)
+
+#### 0.9.27 - June 15 2015
+* Improved Html reporter to have stack trace, error message and url of failing page [Issue #202](https://github.com/lefthandedgoat/canopy/issues/202)
+* Updated to Selenium 2.46
diff --git a/docs/files/reporttemplate.html b/docs/files/reporttemplate.html
index 1b4e9c3c..099d2c56 100644
--- a/docs/files/reporttemplate.html
+++ b/docs/files/reporttemplate.html
@@ -91,35 +91,45 @@
var addToContext = function (context, passFailSkip, testName, image) {
var ctx = $('#contexts tr[data-context="' + context + '"]');
if (passFailSkip === "Pass") {
- ctx.next('tr').find('table').last('tr').append('
' + testName + ' |
');
+ ctx.next('tr').find('table').last('tr').append('' + testName + ' |
');
if (ctx.hasClass("error") === false) {
ctx.removeClass("warning").removeClass("info").addClass("success");
}
}
if (passFailSkip === "Fail") {
- ctx.next('tr').find('table').last('tr').append('' + testName + ' |
');
+ ctx.next('tr').find('table').last('tr').append('' + testName + ' |
');
ctx.removeClass("success").removeClass("warning").removeClass("info").addClass("error");
}
if (passFailSkip === "Todo") {
- ctx.next('tr').find('table').last('tr').append('' + testName + ' |
');
+ ctx.next('tr').find('table').last('tr').append('' + testName + ' |
');
if (ctx.hasClass("error") === false && ctx.hasClass("info") === false && ctx.hasClass("success") === false){
ctx.addClass("warning");
}
}
if (passFailSkip === "Skip") {
- ctx.next('tr').find('table').last('tr').append('' + testName + ' |
');
+ ctx.next('tr').find('table').last('tr').append('' + testName + ' |
');
if (ctx.hasClass("error") === false && ctx.hasClass("warning") === false && ctx.hasClass("success") === false){
ctx.addClass("info");
}
}
if(image !== "") {
- ctx.next('tr').find('table').find('tr').last().find('td').last().append(' | ')
+ ctx.next('tr').find('table').find('tr').last().find('td').last().append('')
}
recalculateTotals();
};
+ var addUrlToTest = function (context, url) {
+ var ctx = $('#contexts tr[data-context="' + context + '"]');
+ ctx.next('tr').find('table').last('tr').find('.test').last().after('');
+ };
+
+ var addStackToTest = function (context, stack) {
+ var ctx = $('#contexts tr[data-context="' + context + '"]');
+ ctx.next('tr').find('table').last('tr').find('.test').last().after('');
+ };
+
var collapseContextsExcept = function (context) {
var ctxs = $('#contexts tr.result[data-owning-context !="' + context + '"]');
ctxs.each(function () {
@@ -127,14 +137,13 @@
});
};
- $(document).ready(function() {
-
+ $(document).ready(function() {
var showHide = function(next) {
if (next.is(":visible")) {
- next.hide();
- } else {
- next.show();
- }
+ next.hide();
+ } else {
+ next.show();
+ }
};
//wire up to existing contexts on the page
diff --git a/nuget/canopy.nuspec b/nuget/canopy.nuspec
index 4ce471eb..ed1dc4e7 100644
--- a/nuget/canopy.nuspec
+++ b/nuget/canopy.nuspec
@@ -13,8 +13,8 @@
@tags@
-
-
+
+
diff --git a/src/canopy/AssemblyInfo.fs b/src/canopy/AssemblyInfo.fs
index b9b61e36..7163c132 100644
--- a/src/canopy/AssemblyInfo.fs
+++ b/src/canopy/AssemblyInfo.fs
@@ -4,9 +4,9 @@ open System.Reflection
[]
[]
[]
-[]
-[]
+[]
+[]
do ()
module internal AssemblyVersionInformation =
- let [] Version = "0.9.26"
+ let [] Version = "0.9.27"
diff --git a/src/canopy/canopy.fsproj b/src/canopy/canopy.fsproj
index 797be9d8..59e78106 100644
--- a/src/canopy/canopy.fsproj
+++ b/src/canopy/canopy.fsproj
@@ -68,9 +68,6 @@
..\..\packages\FSharp.Core.3.0.2\lib\net40\FSharp.Core.dll
True
-
- False
-
..\..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll
@@ -87,11 +84,11 @@
- ..\..\packages\Selenium.WebDriver.2.45.0\lib\net40\WebDriver.dll
+ ..\..\packages\Selenium.WebDriver.2.46.0\lib\net40\WebDriver.dll
True
- ..\..\packages\Selenium.Support.2.45.0\lib\net40\WebDriver.Support.dll
+ ..\..\packages\Selenium.Support.2.46.0\lib\net40\WebDriver.Support.dll
True
diff --git a/src/canopy/packages.config b/src/canopy/packages.config
index a51bcb65..3d7c0b06 100644
--- a/src/canopy/packages.config
+++ b/src/canopy/packages.config
@@ -2,7 +2,7 @@
-
-
+
+
\ No newline at end of file
diff --git a/src/canopy/reporters.fs b/src/canopy/reporters.fs
index 69ce82e3..44096994 100644
--- a/src/canopy/reporters.fs
+++ b/src/canopy/reporters.fs
@@ -7,7 +7,7 @@ open types
type IReporter =
abstract member testStart : string -> unit
abstract member pass : unit -> unit
- abstract member fail : Exception -> string -> byte [] -> unit
+ abstract member fail : Exception -> string -> byte [] -> string -> unit
abstract member todo : unit -> unit
abstract member skip : unit -> unit
abstract member testEnd : string -> unit
@@ -29,11 +29,13 @@ type ConsoleReporter() =
Console.WriteLine("Passed");
Console.ResetColor()
- member this.fail ex id ss =
+ member this.fail ex id ss url =
Console.ForegroundColor <- ConsoleColor.Red
Console.WriteLine("Error: ");
Console.ResetColor()
Console.WriteLine(ex.Message);
+ Console.Write("Url: ");
+ Console.WriteLine(url);
Console.WriteLine("Stack: ");
ex.StackTrace.Split([| "\r\n"; "\n" |], StringSplitOptions.None)
|> Array.iter (fun trace ->
@@ -119,7 +121,7 @@ type TeamCityReporter() =
interface IReporter with
member this.pass () = consoleReporter.pass ()
- member this.fail ex id ss =
+ member this.fail ex id ss url =
let mutable image = ""
if not (Array.isEmpty ss) then
image <- String.Format("canopy-image({0})", Convert.ToBase64String(ss))
@@ -128,7 +130,7 @@ type TeamCityReporter() =
(tcFriendlyMessage id)
(tcFriendlyMessage ex.Message)
(tcFriendlyMessage image))
- consoleReporter.fail ex id ss
+ consoleReporter.fail ex id ss url
member this.describe d =
teamcityReport (sprintf "message text='%s' status='NORMAL'" (tcFriendlyMessage d))
@@ -207,7 +209,7 @@ type LiveHtmlReporter(browser : BrowserStartMode, driverPath : string) =
with get () = _browser
member val reportPath = None with get, set
- member val reportTemplateUrl = @"http://lefthandedgoat.github.com/canopy/reporttemplate.html" with get, set
+ member val reportTemplateUrl = @"file:///C:/projects/canopy/docs/files/reporttemplate.html" with get, set
member this.js script = (_browser :?> IJavaScriptExecutor).ExecuteScript(script)
member this.reportHtml () = (this.js "return $('*').html();").ToString()
member private this.swallowedJS script = try (_browser :?> IJavaScriptExecutor).ExecuteScript(script) |> ignore with | ex -> ()
@@ -222,9 +224,13 @@ type LiveHtmlReporter(browser : BrowserStartMode, driverPath : string) =
this.swallowedJS (sprintf "addToContext('%s', 'Pass', '%s', '%s');" context test "")
consoleReporter.pass ()
- member this.fail ex id ss =
+ member this.fail ex id ss url =
this.swallowedJS (sprintf "addToContext('%s', 'Fail', '%s', '%s');" context test (Convert.ToBase64String(ss)))
- consoleReporter.fail ex id ss
+ let stack = sprintf "%s%s%s" ex.Message System.Environment.NewLine ex.StackTrace
+ let stack = System.Web.HttpUtility.JavaScriptStringEncode(stack)
+ this.swallowedJS (sprintf "addStackToTest ('%s', '%s');" context stack)
+ this.swallowedJS (sprintf "addUrlToTest ('%s', '%s');" context url)
+ consoleReporter.fail ex id ss url
member this.describe d =
consoleReporter.describe d
diff --git a/src/canopy/runner.fs b/src/canopy/runner.fs
index 1910da83..ac5736ce 100644
--- a/src/canopy/runner.fs
+++ b/src/canopy/runner.fs
@@ -78,7 +78,7 @@ let fail (ex : Exception) id =
let failSuite (ex: Exception) (suite : suite) =
let reportFailedTest (ex: Exception) (test : Test) =
reporter.testStart test.Id
- fail ex test.Id
+ fail ex test.Id browser.Url
reporter.testEnd test.Id
suite.Tests |> List.iter (fun test -> reportFailedTest ex test)
@@ -104,7 +104,7 @@ let run () =
pass()
with
| ex when failureMessage <> null && failureMessage = ex.Message -> pass()
- | ex -> fail ex test.Id
+ | ex -> fail ex test.Id browser.Url
reporter.testEnd test.Id
failureMessage <- null
diff --git a/src/sampleprojectstructure/packages.config b/src/sampleprojectstructure/packages.config
index 812c66b5..80c3fa88 100644
--- a/src/sampleprojectstructure/packages.config
+++ b/src/sampleprojectstructure/packages.config
@@ -1,6 +1,6 @@
-
-
+
+
\ No newline at end of file
diff --git a/src/sampleprojectstructure/sampleprojectstructure.fsproj b/src/sampleprojectstructure/sampleprojectstructure.fsproj
index f99bcf90..28c12f11 100644
--- a/src/sampleprojectstructure/sampleprojectstructure.fsproj
+++ b/src/sampleprojectstructure/sampleprojectstructure.fsproj
@@ -51,7 +51,11 @@
- ..\..\packages\Selenium.WebDriver.2.45.0\lib\net40\WebDriver.dll
+ ..\..\packages\Selenium.WebDriver.2.46.0\lib\net40\WebDriver.dll
+ True
+
+
+ ..\..\packages\Selenium.Support.2.46.0\lib\net40\WebDriver.Support.dll
True
diff --git a/tests/basictests/basictests.fsproj b/tests/basictests/basictests.fsproj
index d35beac9..2bf23798 100644
--- a/tests/basictests/basictests.fsproj
+++ b/tests/basictests/basictests.fsproj
@@ -75,11 +75,11 @@
- ..\..\packages\Selenium.WebDriver.2.45.0\lib\net40\WebDriver.dll
+ ..\..\packages\Selenium.WebDriver.2.46.0\lib\net40\WebDriver.dll
True
- ..\..\packages\Selenium.Support.2.45.0\lib\net40\WebDriver.Support.dll
+ ..\..\packages\Selenium.Support.2.46.0\lib\net40\WebDriver.Support.dll
True
diff --git a/tests/basictests/packages.config b/tests/basictests/packages.config
index a1940c37..9ec92b84 100644
--- a/tests/basictests/packages.config
+++ b/tests/basictests/packages.config
@@ -2,6 +2,6 @@
-
-
+
+
\ No newline at end of file
diff --git a/tests/documentationtests/documentationtests.fsproj b/tests/documentationtests/documentationtests.fsproj
index 553b045e..2306c516 100644
--- a/tests/documentationtests/documentationtests.fsproj
+++ b/tests/documentationtests/documentationtests.fsproj
@@ -74,11 +74,11 @@
- ..\..\packages\Selenium.WebDriver.2.44.0\lib\net40\WebDriver.dll
+ ..\..\packages\Selenium.WebDriver.2.46.0\lib\net40\WebDriver.dll
True
- ..\..\packages\Selenium.Support.2.44.0\lib\net40\WebDriver.Support.dll
+ ..\..\packages\Selenium.Support.2.46.0\lib\net40\WebDriver.Support.dll
True
diff --git a/tests/documentationtests/packages.config b/tests/documentationtests/packages.config
index 9561ab30..02a4c790 100644
--- a/tests/documentationtests/packages.config
+++ b/tests/documentationtests/packages.config
@@ -1,6 +1,6 @@
-
-
+
+
\ No newline at end of file