Skip to content

updating to use axe-core version 3.2.2 #10

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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
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
15 changes: 9 additions & 6 deletions Globant.Selenium.Axe/Globant.Selenium.Axe.Test/AxeBuilderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,15 @@ public void ShouldExecuteAxeScript()
.Setup(js => js.ExecuteAsyncScript(It.IsAny<string>(), It.IsAny<object[]>()))
.Returns(new
{
violations = new object[] { },
passes = new object[] { },
inapplicable = new object[] { },
incomplete = new object[] { },
timestamp = DateTimeOffset.Now,
url = "www.test.com",
results = new
{
violations = new object[] { },
passes = new object[] { },
inapplicable = new object[] { },
incomplete = new object[] { },
timestamp = DateTimeOffset.Now,
url = "www.test.com",
}
});

var builder = new AxeBuilder(driver.Object);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
<IsCodedUITest>False</IsCodedUITest>
<TestProjectType>UnitTest</TestProjectType>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
Expand All @@ -37,31 +39,36 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
<HintPath>..\packages\Castle.Core.4.2.1\lib\net45\Castle.Core.dll</HintPath>
<HintPath>..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll</HintPath>
</Reference>
<Reference Include="FluentAssertions, Version=4.19.2.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.19.2\lib\net45\FluentAssertions.dll</HintPath>
<Private>True</Private>
<Reference Include="FluentAssertions, Version=5.6.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.5.6.0\lib\net45\FluentAssertions.dll</HintPath>
</Reference>
<Reference Include="FluentAssertions.Core, Version=4.19.2.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.19.2\lib\net45\FluentAssertions.Core.dll</HintPath>
<Private>True</Private>
<Reference Include="Moq, Version=4.10.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.10.1\lib\net45\Moq.dll</HintPath>
</Reference>
<Reference Include="Moq, Version=4.7.142.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.7.142\lib\net45\Moq.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Drawing" />
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="WebDriver, Version=2.53.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Selenium.WebDriver.2.53.0\lib\net40\WebDriver.dll</HintPath>
<Private>True</Private>
<Reference Include="WebDriver, Version=3.141.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Selenium.WebDriver.3.141.0\lib\net45\WebDriver.dll</HintPath>
</Reference>
<Reference Include="WebDriver.Support, Version=3.141.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Selenium.Support.3.141.0\lib\net45\WebDriver.Support.dll</HintPath>
</Reference>
</ItemGroup>
<Choose>
Expand All @@ -88,9 +95,8 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config">
<SubType>Designer</SubType>
</None>
<None Include="app.config" />
<None Include="packages.config" />
</ItemGroup>
<Choose>
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
Expand All @@ -112,6 +118,15 @@
</Choose>
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Selenium.WebDriver.ChromeDriver.73.0.3683.68\build\Selenium.WebDriver.ChromeDriver.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Selenium.WebDriver.ChromeDriver.73.0.3683.68\build\Selenium.WebDriver.ChromeDriver.targets'))" />
<Error Condition="!Exists('..\packages\Selenium.Firefox.WebDriver.0.23.0\build\Selenium.Firefox.WebDriver.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Selenium.Firefox.WebDriver.0.23.0\build\Selenium.Firefox.WebDriver.targets'))" />
</Target>
<Import Project="..\packages\Selenium.WebDriver.ChromeDriver.73.0.3683.68\build\Selenium.WebDriver.ChromeDriver.targets" Condition="Exists('..\packages\Selenium.WebDriver.ChromeDriver.73.0.3683.68\build\Selenium.WebDriver.ChromeDriver.targets')" />
<Import Project="..\packages\Selenium.Firefox.WebDriver.0.23.0\build\Selenium.Firefox.WebDriver.targets" Condition="Exists('..\packages\Selenium.Firefox.WebDriver.0.23.0\build\Selenium.Firefox.WebDriver.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
Expand Down
24 changes: 20 additions & 4 deletions Globant.Selenium.Axe/Globant.Selenium.Axe.Test/IntegrationTests.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,36 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;
using FluentAssertions;
using System;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
using System.Configuration;

namespace Globant.Selenium.Axe.Test
{
[TestClass]
public class IntegrationTests
{
private IWebDriver _webDriver;
private const string TargetTestUrl = "https://www.facebook.com/";
private WebDriverWait _wait;
private const string TargetTestUrl = "https://www.google.ca/";

[TestInitialize]
public void Initialize()
{
_webDriver = new FirefoxDriver();
_webDriver.Manage().Timeouts().SetScriptTimeout(TimeSpan.FromMinutes(3));
ChromeOptions options = new ChromeOptions
{
UnhandledPromptBehavior = UnhandledPromptBehavior.Accept,
};
options.AddArgument("no-sandbox");
options.AddArgument("--log-level=3");
options.AddArgument("--silent");
options.BinaryLocation = ConfigurationManager.AppSettings["ChromeLocation"].ToString();
ChromeDriverService service = ChromeDriverService.CreateDefaultService(Environment.CurrentDirectory);
service.SuppressInitialDiagnosticInformation = true;
_webDriver = new ChromeDriver(Environment.CurrentDirectory, options);
_wait = new WebDriverWait(_webDriver, TimeSpan.FromMinutes(4));
_webDriver.Manage().Window.Maximize();
}

Expand All @@ -32,6 +46,8 @@ public virtual void TearDown()
public void TestAnalyzeTarget()
{
_webDriver.Navigate().GoToUrl(TargetTestUrl);
// wait for email input box is found
_wait.Until(drv => drv.FindElement(By.XPath("//input[@title='Search']")));
AxeResult results = _webDriver.Analyze();
results.Should().NotBeNull(nameof(results));
}
Expand Down
15 changes: 15 additions & 0 deletions Globant.Selenium.Axe/Globant.Selenium.Axe.Test/app.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

<appSettings>
<add key="ChromeLocation" value="C:\Selenium\chromium\chrome.exe"/>
</appSettings>
</configuration>
16 changes: 11 additions & 5 deletions Globant.Selenium.Axe/Globant.Selenium.Axe.Test/packages.config
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Castle.Core" version="4.2.1" targetFramework="net45" />
<package id="FluentAssertions" version="4.19.2" targetFramework="net45" />
<package id="Moq" version="4.7.142" targetFramework="net45" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
<package id="Selenium.WebDriver" version="2.53.0" targetFramework="net45" />
<package id="Castle.Core" version="4.3.1" targetFramework="net45" />
<package id="FluentAssertions" version="5.6.0" targetFramework="net45" />
<package id="Moq" version="4.10.1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net45" />
<package id="Selenium.Firefox.WebDriver" version="0.23.0" targetFramework="net45" />
<package id="Selenium.Support" version="3.141.0" targetFramework="net45" />
<package id="Selenium.WebDriver" version="3.141.0" targetFramework="net45" />
<package id="Selenium.WebDriver.ChromeDriver" version="73.0.3683.68" targetFramework="net45" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net45" />
<package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net45" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net45" />
</packages>
42 changes: 36 additions & 6 deletions Globant.Selenium.Axe/Globant.Selenium.Axe/AxeBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class AxeBuilder

private static readonly AxeBuilderOptions DefaultOptions = new AxeBuilderOptions {ScriptProvider = new EmbeddedResourceAxeProvider()};

public string Options { get; set; } = "null";
public string Options { get; set; } = "{}";

/// <summary>
/// Initialize an instance of <see cref="AxeBuilder"/>
Expand Down Expand Up @@ -85,7 +85,8 @@ public AxeBuilder Exclude(params string[] selectors)
/// <returns>An aXe results document</returns>
public AxeResult Analyze(IWebElement context)
{
string command = string.Format("axe.a11yCheck(arguments[0], {0}, arguments[arguments.length - 1]);", Options);
//string command = string.Format("axe.a11yCheck(arguments[0], {0}, arguments[arguments.length - 1]);", Options);
string command = getAxeSnippet("arguments[0]");
return Execute(command, context);
}

Expand All @@ -95,23 +96,52 @@ public AxeResult Analyze(IWebElement context)
/// <returns>An aXe results document</returns>
public AxeResult Analyze()
{
string command;
string axeContext;

if (_includeExcludeManager.HasMoreThanOneSelectorsToIncludeOrSomeToExclude())
{
command = $"axe.a11yCheck({_includeExcludeManager.ToJson()}, {Options}, arguments[arguments.length - 1]);";
axeContext = $"{ _includeExcludeManager.ToJson()}";
//command = $"axe.a11yCheck({ _includeExcludeManager.ToJson()}, {Options}, arguments[arguments.length - 1]);";
}
else if (_includeExcludeManager.HasOneItemToInclude())
{
string itemToInclude = _includeExcludeManager.GetFirstItemToInclude().Replace("'", "");
command = $"axe.a11yCheck('{itemToInclude}', {Options}, arguments[arguments.length - 1]);";
axeContext = $"{itemToInclude}";
//command = $"axe.a11yCheck('{itemToInclude}', {Options}, arguments[arguments.length - 1]);";
}
else
{
command = $"axe.a11yCheck(document, {Options}, arguments[arguments.length - 1]);";
axeContext = "document";
//command = $"axe.a11yCheck(document, {Options}, arguments[arguments.length - 1]);";
}

string command = getAxeSnippet(axeContext);

return Execute(command);
}

///<summary>
/// Create the axe javascript code to be executed
///</summary>
///
/// <param name="context"> HTML content to run "document", "included items", "includeExcludeManager"<param/>
private String getAxeSnippet(String context)
{
return String.Format(
"var callback = arguments[arguments.length - 1];" +
"var context = {0};" +
"var options = {1};" +
"var result = {{ error: '', results: null }};" +
"axe.run(context, options, function (err, res) {{" +
" if (err) {{" +
" result.error = err.message;" +
" }} else {{" +
" result.results = res;" +
" }}" +
" callback(result);" +
"}});",
context, $"{Options}"
);
}
}
}
7 changes: 6 additions & 1 deletion Globant.Selenium.Axe/Globant.Selenium.Axe/AxeResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,26 @@ public class AxeResult
public DateTimeOffset? Timestamp { get; private set; }
public string Url { get; private set; }

public AxeResult(JObject results)
public string Error { get; private set; }

public AxeResult(JObject result)
{
JToken results = result.SelectToken("results");
JToken violationsToken = results.SelectToken("violations");
JToken passesToken = results.SelectToken("passes");
JToken inapplicableToken = results.SelectToken("inapplicable");
JToken incompleteToken = results.SelectToken("incomplete");
JToken timestampToken = results.SelectToken("timestamp");
JToken urlToken = results.SelectToken("url");
JToken error = result.SelectToken("error");

Violations = violationsToken?.ToObject<AxeResultItem[]>();
Passes = passesToken?.ToObject<AxeResultItem[]>();
Inapplicable = inapplicableToken?.ToObject<AxeResultItem[]>();
Incomplete = incompleteToken?.ToObject<AxeResultItem[]>();
Timestamp = timestampToken?.ToObject<DateTimeOffset>();
Url = urlToken?.ToObject<string>();
Error = error?.ToObject<string>();
}
}
}
14 changes: 14 additions & 0 deletions Globant.Selenium.Axe/Globant.Selenium.Axe/AxeResultCheck.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Collections.Generic;


namespace Globant.Selenium.Axe
{
public class AxeResultCheck
{
public object Data { get; set; }
public string Id { get; set; }
public string Impact { get; set; }
public string Message { get; set; }
public AxeResultRelatedNode[] RelatedNodes { get; set; }
}
}
6 changes: 3 additions & 3 deletions Globant.Selenium.Axe/Globant.Selenium.Axe/AxeResultNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ public class AxeResultNode
public List<string> Target { get; set; }
public string Html { get; set; }
public string Impact { get; set; }
public List<object> Any { get; set; }
public List<object> All { get; set; }
public List<object> None { get; set; }
public AxeResultCheck[] Any { get; set; }
public AxeResultCheck[] All { get; set; }
public AxeResultCheck[] None { get; set; }
}
}
11 changes: 11 additions & 0 deletions Globant.Selenium.Axe/Globant.Selenium.Axe/AxeResultRelatedNode.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System.Collections.Generic;


namespace Globant.Selenium.Axe
{
public class AxeResultRelatedNode
{
public string Html { get; set; }
public List<string> Target { get; set; }
}
}
Loading