Skip to content

Instantly share code, notes, and snippets.

@dahlbyk
Created January 12, 2010 04:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dahlbyk/274920 to your computer and use it in GitHub Desktop.
Save dahlbyk/274920 to your computer and use it in GitHub Desktop.
Index: branches/1.3.1/src/Core/IE.cs
===================================================================
--- branches/1.3.1/src/Core/IE.cs (revision 1091)
+++ branches/1.3.1/src/Core/IE.cs (working copy)
@@ -20,6 +20,7 @@
using System.Collections;
using System.Diagnostics;
using System.Drawing;
+using System.Net;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
@@ -600,6 +601,8 @@
}
InitIEAndStartDialogWatcher(internetExplorer);
+
+ AttachEventHandlers();
}
private void CreateNewIEAndGoToUri(Uri uri, LogonDialogHandler logonDialogHandler, bool createInNewProcess)
@@ -629,6 +632,8 @@
DialogWatcher.Add(logonDialogHandler);
}
+ AttachEventHandlers();
+
WaitForComplete();
}
@@ -706,7 +711,7 @@
throw new IENotFoundException(findBy.ConstraintToString(), timeout);
}
- private static SHDocVw.InternetExplorer findInternetExplorer(BaseConstraint findBy, int timeout)
+ protected static SHDocVw.InternetExplorer findInternetExplorer(BaseConstraint findBy, int timeout)
{
Logger.LogAction("Busy finding Internet Explorer matching constriant " + findBy.ConstraintToString());
@@ -907,6 +912,27 @@
get { return ie; }
}
+ protected void AttachEventHandlers()
+ {
+ ie.BeforeNavigate2 += (object pDisp, ref object URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel) =>
+ {
+ ErrorCode = null;
+ };
+ ie.NavigateError += (object pDisp, ref object URL, ref object Frame, ref object StatusCode, ref bool Cancel) =>
+ {
+ ErrorCode = (HttpStatusCode)StatusCode;
+ };
+ }
+
+ /// <summary>
+ /// HTTP Status Code of last error, or null if the last request was successful
+ /// </summary>
+ public HttpStatusCode? ErrorCode
+ {
+ get;
+ private set;
+ }
+
/// <summary>
/// Navigates the browser back to the previously displayed Url (like the back
/// button in Internet Explorer).
Index: branches/1.3.1/src/UnitTests/IETests.cs
===================================================================
--- branches/1.3.1/src/UnitTests/IETests.cs (revision 1091)
+++ branches/1.3.1/src/UnitTests/IETests.cs (working copy)
@@ -19,6 +19,7 @@
using System;
using System.Diagnostics;
using System.Drawing;
+using System.Net;
using System.Runtime.InteropServices;
using System.Threading;
using System.Web;
@@ -88,6 +89,68 @@
}
}
+ [Test, Category("InternetConnectionNeeded")]
+ public void RealUrlHasNullErrorCode()
+ {
+ using (IE ie = new IE(GoogleUrl))
+ {
+ Assert.That(ie.ErrorCode, Is.Null);
+ }
+ }
+
+ [Test, Category("InternetConnectionNeeded")]
+ public void FakeUrlHasErrorCodeNotFound()
+ {
+ using (IE ie = new IE(GoogleUrl + "/thisdoesnotexist"))
+ {
+ Assert.That(ie.ErrorCode, Is.EqualTo(HttpStatusCode.NotFound));
+ }
+ }
+
+ [Test, Category("InternetConnectionNeeded")]
+ public void RealUrlAfterFakeUrlHasStatusCodeNotFound()
+ {
+ using (IE ie = new IE("http://www.google.com/thisdoesnotexist"))
+ {
+ ie.GoTo(GoogleUrl);
+ Assert.That(ie.ErrorCode, Is.Null);
+ }
+ }
+
+ [Test, Category("InternetConnectionNeeded")]
+ public void RealUrlHasNullErrorCode_Attached()
+ {
+ using (new IE(MainURI))
+ using (var ie = IE.AttachToIE(Find.ByUrl(MainURI)))
+ {
+ ie.GoTo(GoogleUrl);
+ Assert.That(ie.ErrorCode, Is.Null);
+ }
+ }
+
+ [Test, Category("InternetConnectionNeeded")]
+ public void FakeUrlHasErrorCodeNotFound_Attached()
+ {
+ using (new IE(MainURI))
+ using (var ie = IE.AttachToIE(Find.ByUrl(MainURI)))
+ {
+ ie.GoTo(GoogleUrl + "/thisdoesnotexist");
+ Assert.That(ie.ErrorCode, Is.EqualTo(HttpStatusCode.NotFound));
+ }
+ }
+
+ [Test, Category("InternetConnectionNeeded")]
+ public void RealUrlAfterFakeUrlHasStatusCodeNotFound_Attached()
+ {
+ using (new IE(MainURI))
+ using (var ie = IE.AttachToIE(Find.ByUrl(MainURI)))
+ {
+ ie.GoTo("http://www.google.com/thisdoesnotexist");
+ ie.GoTo(GoogleUrl);
+ Assert.That(ie.ErrorCode, Is.Null);
+ }
+ }
+
[Test, Category("InternetConnectionNeeded")]
public void GoogleSearchWithEncodedQueryString()
{
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment