Skip to content

Commit

Permalink
Replace IIE with Selenium in minimaltest.core
Browse files Browse the repository at this point in the history
SHDocVw.InternetExplorer was always brittle and required the now per
default blocked 127.0.0.1 instead of localhost. With update 1909(?)
it even ignores the .Visible property, which re-triggers issue #3.

The new iselenium/iselenium.core extensions mirror the now deprecated
and unmaintainable iie/iie.core test API as closely as possible with
the NuGet Selenium.WebDriver.
  • Loading branch information
toniarnold committed May 9, 2020
1 parent fa30be9 commit be6a26a
Show file tree
Hide file tree
Showing 33 changed files with 883 additions and 48 deletions.
2 changes: 1 addition & 1 deletion asp.webforms/asp.Master
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<%@ master language="C#" autoeventwireup="true" codebehind="asp.master.cs" inherits="asp.asp" %>
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="asp.master.cs" Inherits="asp.asp" %>

<!DOCTYPE html>

Expand Down
38 changes: 19 additions & 19 deletions asp.webforms/calculator/Main.ascx
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,23 @@
</style>

<div class="header-container">
<asplib:ShareButton ID="shareButton" runat="server"
OnServerClick="shareButton_Click" />
<asplib:sharebutton id="shareButton" runat="server"
onserverclick="shareButton_Click" />
<a href="<%= this.StorageLinkUrl %>" id="<%= this.StorageLinkClientID %>" class="hamburger-box">Session Storage: <%= this.Storage %> <%= this.Encrypted %>
</a>
<div class="hamburger-box" id="hamburgerDiv" runat="server">
<span class="hamburger">☰</span>
</div>
<ajaxToolkit:PopupControlExtender ID="PopEx" runat="server"
TargetControlID="hamburgerDiv"
PopupControlID="gridViewPanel"
Position="Bottom"
OffsetX="-100" />
<asp:ObjectDataSource ID="sessionDumpDataSource" runat="server"
TypeName="asp.calculator.Main"
SelectMethod="AllMainRows" />
<asp:UpdatePanel ID="gridViewPanel" runat="server"
UpdateMode="Always">
<ajaxtoolkit:popupcontrolextender id="PopEx" runat="server"
targetcontrolid="hamburgerDiv"
popupcontrolid="gridViewPanel"
position="Bottom"
offsetx="-100" />
<asp:objectdatasource id="sessionDumpDataSource" runat="server"
typename="asp.calculator.Main"
selectmethod="AllMainRows" />
<asp:updatepanel id="gridViewPanel" runat="server"
updatemode="Always">
<ContentTemplate>
<asp:GridView ID="sessionDumpGridView" runat="server"
DataSourceID="sessionDumpDataSource"
Expand Down Expand Up @@ -92,14 +92,14 @@
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</asp:updatepanel>
</div>

<uc:Title ID="title" runat="server" />
<uc:title id="title" runat="server" />
<hr />
<uc:Splash ID="splash" runat="server" />
<uc:Enter ID="enter" runat="server" />
<uc:Calculate ID="calculate" runat="server" />
<uc:Error ID="error" runat="server" />
<uc:splash id="splash" runat="server" />
<uc:enter id="enter" runat="server" />
<uc:calculate id="calculate" runat="server" />
<uc:error id="error" runat="server" />
<hr />
<uc:Footer ID="footer" runat="server" />
<uc:footer id="footer" runat="server" />
12 changes: 6 additions & 6 deletions asp.webforms/calculator/View/Calculate.ascx
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
}
</style>
<p>
<asp:Button ID="addButton" runat="server" Text=" + " OnClick="addButton_Click" CssClass="button" />
<asp:Button ID="subButton" runat="server" Text=" - " OnClick="subButton_Click" CssClass="button" />
<asp:Button ID="mulButton" runat="server" Text=" * " OnClick="mulButton_Click" CssClass="button" />
<asp:Button ID="divButton" runat="server" Text=" / " OnClick="divButton_Click" CssClass="button" />
<asp:button id="addButton" runat="server" text=" + " onclick="addButton_Click" cssclass="button" />
<asp:button id="subButton" runat="server" text=" - " onclick="subButton_Click" cssclass="button" />
<asp:button id="mulButton" runat="server" text=" * " onclick="mulButton_Click" cssclass="button" />
<asp:button id="divButton" runat="server" text=" / " onclick="divButton_Click" cssclass="button" />
<button id="powButton" runat="server"
onserverclick="powButton_Click"
class="button"
Expand All @@ -23,8 +23,8 @@
type="button">
&radic;<span style='text-decoration: overline'>x</span>
</button>
<asp:Button ID="clrButton" runat="server" Text=" C " OnClick="clrButton_Click" CssClass="button" />
<asp:Button ID="clrAllButton" runat="server" Text="CA" OnClick="clrAllButton_Click" CssClass="button" />
<asp:button id="clrButton" runat="server" text=" C " onclick="clrButton_Click" cssclass="button" />
<asp:button id="clrAllButton" runat="server" text="CA" onclick="clrAllButton_Click" cssclass="button" />
</p>

<p>
Expand Down
4 changes: 2 additions & 2 deletions asp.webforms/calculator/View/Enter.ascx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Enter.ascx.cs" Inherits="asp.calculator.View.Enter" %>
<p>
<asp:TextBox ID="operandTextBox" runat="server" EnableViewState="false"
size="15em" MaxLength="20"></asp:TextBox>
<asp:textbox id="operandTextBox" runat="server" enableviewstate="false"
size="15em" maxlength="20"></asp:textbox>
</p>
54 changes: 53 additions & 1 deletion aspnettest.sln
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "accesscode_sm.core", "apise
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "asp.websharper.spa.fs", "asp.websharper.spa.fs\asp.websharper.spa.fs.fsproj", "{16B1CA26-D957-4C37-BDE1-F7781A507C68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "asp.websharper.spa.Model", "asp.websharper.spa.Model\asp.websharper.spa.Model.csproj", "{C1838B1E-DC3F-4258-B5CA-2B964B1C38D0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "asp.websharper.spa.Model", "asp.websharper.spa.Model\asp.websharper.spa.Model.csproj", "{C1838B1E-DC3F-4258-B5CA-2B964B1C38D0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calculator.websharper.spa", "asp.websharper.spa.Model\smc\calculator.websharper.spa.vcxproj", "{4588A352-8E01-4F45-BC90-80ABC5AAC7AE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iselenium", "iselenium\iselenium.csproj", "{C223B9D7-18C3-46EB-8F91-81BDE62D3264}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iselenium.core", "iselenium.core\iselenium.core.csproj", "{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -931,6 +935,54 @@ Global
{4588A352-8E01-4F45-BC90-80ABC5AAC7AE}.ReleaseNoTrace|x64.Build.0 = Release|x64
{4588A352-8E01-4F45-BC90-80ABC5AAC7AE}.ReleaseNoTrace|x86.ActiveCfg = Release|Win32
{4588A352-8E01-4F45-BC90-80ABC5AAC7AE}.ReleaseNoTrace|x86.Build.0 = Release|Win32
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Debug|x64.ActiveCfg = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Debug|x64.Build.0 = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Debug|x86.ActiveCfg = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Debug|x86.Build.0 = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.DebugNoTrace|Any CPU.ActiveCfg = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.DebugNoTrace|Any CPU.Build.0 = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.DebugNoTrace|x64.ActiveCfg = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.DebugNoTrace|x64.Build.0 = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.DebugNoTrace|x86.ActiveCfg = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.DebugNoTrace|x86.Build.0 = Debug|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Release|Any CPU.Build.0 = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Release|x64.ActiveCfg = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Release|x64.Build.0 = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Release|x86.ActiveCfg = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.Release|x86.Build.0 = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.ReleaseNoTrace|Any CPU.ActiveCfg = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.ReleaseNoTrace|Any CPU.Build.0 = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.ReleaseNoTrace|x64.ActiveCfg = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.ReleaseNoTrace|x64.Build.0 = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.ReleaseNoTrace|x86.ActiveCfg = Release|Any CPU
{C223B9D7-18C3-46EB-8F91-81BDE62D3264}.ReleaseNoTrace|x86.Build.0 = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Debug|x64.ActiveCfg = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Debug|x64.Build.0 = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Debug|x86.ActiveCfg = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Debug|x86.Build.0 = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.DebugNoTrace|Any CPU.ActiveCfg = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.DebugNoTrace|Any CPU.Build.0 = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.DebugNoTrace|x64.ActiveCfg = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.DebugNoTrace|x64.Build.0 = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.DebugNoTrace|x86.ActiveCfg = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.DebugNoTrace|x86.Build.0 = Debug|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Release|Any CPU.Build.0 = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Release|x64.ActiveCfg = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Release|x64.Build.0 = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Release|x86.ActiveCfg = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.Release|x86.Build.0 = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.ReleaseNoTrace|Any CPU.ActiveCfg = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.ReleaseNoTrace|Any CPU.Build.0 = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.ReleaseNoTrace|x64.ActiveCfg = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.ReleaseNoTrace|x64.Build.0 = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.ReleaseNoTrace|x86.ActiveCfg = Release|Any CPU
{BD8C8219-DCA7-4C37-B7D6-ECFC50A524EC}.ReleaseNoTrace|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
2 changes: 1 addition & 1 deletion iie/IEExtensionBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ private static IHTMLElement GetHTMLElementById(string clientID)
private static IHTMLElement GetHTMLElementByName(string name, int index = 0)
{
var elements = GetHTMLElementsByName(name);
if (elements.length < index)
if (elements.length <= index)
{
throw new ArgumentException(String.Format(
"HTML input element with name='{0}' at index {1} not found", name, index));
Expand Down
15 changes: 15 additions & 0 deletions iselenium.core/IETest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using OpenQA.Selenium.IE;
using System;

namespace iselenium
{
[Obsolete("Replaced by SeleniumTest<InternetExplorerDriver>")]
public class IETest : SeleniumTest<InternetExplorerDriver>
{
}

[Obsolete("Replaced by SeleniumTest<InternetExplorerDriver, TController>")]
public class IETest<TController> : SeleniumTest<InternetExplorerDriver, TController>
{
}
}
13 changes: 13 additions & 0 deletions iselenium.core/IIEMiddleware.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Microsoft.AspNetCore.Http;
using System;

namespace iselenium
{
[Obsolete("Replaced by ISeleniumMiddleware")]
public class IIEMiddleware : ISeleniumMiddleware
{
public IIEMiddleware(RequestDelegate next) : base(next)
{
}
}
}
25 changes: 25 additions & 0 deletions iselenium.core/ISeleniumMiddleware.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;

namespace iselenium
{
public class ISeleniumMiddleware
{
protected readonly RequestDelegate _next;

public ISeleniumMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task Invoke(HttpContext context)
{
// Application_BeginRequest

await _next(context);

// Application_EndRequest
SeleniumExtension.StatusCode = context.Response.StatusCode;
}
}
}
22 changes: 22 additions & 0 deletions iselenium.core/SeleniumTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using asplib.Controllers;
using OpenQA.Selenium;

namespace iselenium
{
/// <summary>
/// Minimal base class for IE tests with a [OneTimeSetUp]/[OneTimeTearDown]
/// pair for starting/stopping Internet Explorer and a static Controller
/// accessor.
/// </summary>
public abstract class SeleniumTest<TWebDriver, TController> : SeleniumTest<TWebDriver>
where TWebDriver : IWebDriver, new()
{
/// <summary>
/// Typed accessor for the controller under test
/// </summary>
protected TController Controller
{
get { return (TController)StaticControllerExtension.GetController(); }
}
}
}
39 changes: 39 additions & 0 deletions iselenium.core/SmcTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using asplib.Controllers;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;

namespace iselenium
{
/// <summary>
/// Base class for Browser tests with accessors for ISmcControl
/// </summary>
[TestFixture]
public abstract class SmcTest<TWebDriver, TController, FSMContext, TState> : StorageTest<TController>
where TWebDriver : IWebDriver, new()
where TController : SmcController<FSMContext, TState>
where FSMContext : statemap.FSMContext
where TState : statemap.State
{
protected FSMContext Fsm
{
get { return this.Controller.Fsm; }
}

protected TState State
{
get { return this.Controller.State; }
}
}

/// <summary>
/// Base class for IE tests with accessors for ISmcControl
/// </summary>
[TestFixture]
public abstract class SmcTest<C, F, S> : SmcTest<InternetExplorerDriver, C, F, S>
where C : SmcController<F, S>
where F : statemap.FSMContext
where S : statemap.State
{
}
}
51 changes: 51 additions & 0 deletions iselenium.core/StorageTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using asplib.Model.Db;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using System.Collections.Generic;

namespace iselenium
{
/// <summary>
/// Base class for Browser tests with a [OneTimeSetUp] / [OneTimeTearDown] pair
/// for Storage.Database which cleans up newly added Main rows.
/// Call SetUpStorage() to configure the storage for that specific test suite.
/// Provides accessors for IStorageControl
[TestFixture]
public abstract class StorageTest<TWebDriver, TController> : SeleniumTest<TWebDriver, TController>, IDeleteNewRows
where TWebDriver : IWebDriver, new()
{
/// <summary>
/// IDeleteNewRows
/// </summary>
public List<(string, string, object)> MaxIds { get; set; }

/// <summary>
/// Remember the last row in [Main] before the tests started
/// </summary>
[OneTimeSetUp]
public void OneTimeSetUpDatabase()
{
this.SelectMaxId(ASP_DBEntities.ConnectionString, "Main", "mainid");
}

/// <summary>
/// Delete any rows in [Main] that have been added since the test start
/// </summary>
[OneTimeTearDown]
public void OneTimeTearDownDatabase()
{
this.DeleteNewRows(ASP_DBEntities.ConnectionString);
}
}

/// <summary>
/// Base class for IE tests with a [OneTimeSetUp] / [OneTimeTearDown] pair
/// for Storage.Database which cleans up newly added Main rows.
/// Call SetUpStorage() to configure the storage for that specific test suite.
/// Provides accessors for IStorageControl
[TestFixture]
public abstract class StorageTest<C> : StorageTest<InternetExplorerDriver, C>, IDeleteNewRows
{
}
}
Loading

0 comments on commit be6a26a

Please sign in to comment.