Skip to content

Instantly share code, notes, and snippets.

@erik-kallen
Created August 22, 2012 20:13
Show Gist options
  • Save erik-kallen/3428959 to your computer and use it in GitHub Desktop.
Save erik-kallen/3428959 to your computer and use it in GitHub Desktop.
Demo of how to use QUnit with NUnit
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Support.UI;
namespace MyWebApp.Tests {
public abstract class TestBase {
public const string BaseAddress = "http://localhost:51379/";
protected abstract string PageAddress { get; }
protected void DoForAllBrowsers(Action<string, IWebDriver, WebDriverWait> action) {
IWebDriver driver = null;
try {
driver = new ChromeDriver();
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
action("Chrome", driver, wait);
}
finally {
if (driver != null)
driver.Quit();
driver = null;
}
try {
driver = new FirefoxDriver();
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
action("Firefox", arg2: driver, arg3: wait);
}
finally {
if (driver != null)
driver.Quit();
driver = null;
}
try {
driver = new InternetExplorerDriver();
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
action("IE", driver, wait);
}
finally {
if (driver != null)
driver.Quit();
driver = null;
}
}
[TestCaseSource("PerformTest")]
public void Outcome(bool pass, string errorMessage) {
if (!pass)
Assert.Fail(errorMessage);
}
private string MakeFailureText(List<Tuple<string, string>> browserAndReasonCombinations) {
if (browserAndReasonCombinations.All(c => c.Item2 == browserAndReasonCombinations[0].Item2))
return "All Browsers: " + browserAndReasonCombinations[0].Item2; // Same reason for failure in all browsers.
var grouped = ( from c in browserAndReasonCombinations.Where(x => x.Item2 != null) group c by c.Item2 into g select new { Message = g.Key, Browsers = string.Join(", ", g.Select(x => x.Item1)) });
return string.Join(Environment.NewLine, grouped.Select(g => g.Browsers + ": " + g.Message));
}
public IEnumerable<TestCaseData> PerformTest() {
var result = Enumerable.Repeat(new { Index = 0, Text = "", Pass = false, Browser = "", ErrorMessage = "" }, 0).ToList();
DoForAllBrowsers((browserName, driver, wait) => {
driver.Url = BaseAddress + PageAddress;
var all = driver.FindElements(By.CssSelector("ol#qunit-tests > li")).ToList();
int index = 0;
foreach (var elem in all) {
bool pass = (" " + elem.GetAttribute("class") + " ").Contains(" pass ");
var label = elem.FindElement(By.CssSelector(":first-child .test-name"));
string errorMessage = null;
if (!pass) {
var failElem = elem.FindElements(By.CssSelector("ol > li.fail .test-message")).FirstOrDefault();
errorMessage = (failElem != null ? failElem.Text : "Unknown error");
}
result.Add(new { Index = index, label.Text, Pass = pass, Browser = browserName, ErrorMessage = errorMessage });
index++;
}
});
var grouped = ( from r in result
group r by r.Index into g
select new { Text = g.First().Text, Pass = g.All(x => x.Pass), ErrorMessage = MakeFailureText(g.Select(x => Tuple.Create(x.Browser, x.ErrorMessage)).ToList()) }
).ToList();
return grouped.Select(item => new TestCaseData(item.Pass, item.ErrorMessage).SetName(item.Text));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment