Je recherche un moyen de réutiliser une suite de test Nunit sans dupliquer toute la suite pour chaque navigateur. On dirait que j'aurais besoin d'un nouveau luminaire pour chaque navigateur. Puis-je envoyer une sorte de réglage de variable d'environnement ou de configuration à partir de l'interface graphique Nunit pour changer le navigateur? Voir ci-dessous:
[TestFixture] public class User { private ISelenium selenium; private StringBuilder verificationErrors; [SetUp] public void SetupTest() { // TheBrowser = How do I populate this variable from the NUnit gui? selenium = new DefaultSelenium("localhost", 4444, **TheBrowser**, "http://localhost:52251/"); selenium.Start(); verificationErrors = new StringBuilder(); } [TearDown] public void TeardownTest() { ... } [Test] public void SearchUser() { ... } }
5 Réponses :
bonne question, beaucoup de gens rencontrent cette question. Je suis un fan d'injecter mon navigateur dans mon étui à tester à l'aide d'un conteneur de CIO. Qui me permet de mettre toute ma configuration de navigateur dans une injection 'Mudule' p>
J'utilise les liaisons et la Guice Java comme mon conteneur IOC, mais les principaux sont les mêmes dans .NET. Vous voulez un champ DefaultSelaium dans votre classe qui est injecté. Vos tests utilisent ensuite cet objet et jetez-le quand ils sont terminés. Vous pouvez trouver que vous pouvez l'injecter immédiatement, ou vous devrez peut-être effectuer la création d'objets dans une méthode de configuration. Quelques choses que vous devriez surveiller, en fonction de votre cadre de test de l'unité: P>
Je suis sûr que vous pouvez améliorer votre Google mieux que je ne le peux, mais ce sont des liens di et nunit que je pensais semblant prometteurs. P>
Tests d'intégration Nunit et injection de dépendance P>
http: // Buildstarted.com/2010/08/24/dependency-Injection-with-nInject-moq-and-unit-testing/ P>
Si vous n'aimez pas DI, j'ai entendu parler des personnes utilisant des méthodes d'usine pour générer leur navigateur en fonction de certaines configurations externes. P>
Nunit 2.5+ prend en charge les appareils de test génériques qui effectuent des tests dans plusieurs navigateurs très simples. http://www.nunit.org/index.php?p=estfixture&r=2.5
Construire ce qui suit créera deux tests de Nunit "GoogletSest", un pour Firefox et un pour IE. P>
using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Firefox; using OpenQA.Selenium.IE; using System.Threading; namespace SeleniumTests { [TestFixture(typeof(FirefoxDriver))] [TestFixture(typeof(InternetExplorerDriver))] public class TestWithMultipleBrowsers<TWebDriver> where TWebDriver : IWebDriver, new() { private IWebDriver driver; [SetUp] public void CreateDriver () { this.driver = new TWebDriver(); } [Test] public void GoogleTest() { driver.Navigate().GoToUrl("http://www.google.com/"); IWebElement query = driver.FindElement(By.Name("q")); query.SendKeys("Bread" + Keys.Enter); Thread.Sleep(2000); Assert.AreEqual("bread - Google Search", driver.Title); driver.Quit(); } } }
Comment peut-on définir les capacités de navigateur avec cette méthode? (Par exemple, j'ai besoin de démarrer chaque navigateur en mode privé) Merci.
Voici un exemple de test de l'unité utilisant un Xunit personnalisé voici le dataattribute personnalisé P> dataattribute code> pour fournir le pilote au test
public enum Type
{
Firefox,
GoogleChrome
}
Je recommande une variation importante sur la solution de Lucifer. Demandez à l'attribut une usine, pas de conducteur, à des méthodes de fait / théorie. Pourquoi? Eh bien, quand vous voyez tous ces fenêtres de navigateur pop-up ( n em> x m em>, où n = nombre de tests, m = navigateurs par test), vous déciderez de vous Vous ne voulez que créer lorsque le test va réellement exécuter. Ainsi, avec des mises à jour de la solution préalable, y compris certaines modifications de noms ... p> using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
namespace SeleniumHelpers
{
public enum DriverType
{
Firefox,
GoogleChrome
}
public class WebDriverFactory
{
private DriverType _driverType;
public WebDriverFactory(DriverType driverType)
{
_driverType = driverType;
}
public static IWebDriver Create(Type browser)
{
IWebDriver webDriver;
switch (browser)
{
case Type.Firefox:
webDriver = new FirefoxDriver();
break;
case Type.GoogleChrome:
webDriver = new ChromeDriver();
break;
default:
webDriver = new ChromeDriver();
break;
}
webDriver.Manage().Window.Maximize();
return webDriver;
}
}
}
[SetUp] public void CreateDriver() { //driver = new TWebDriver(); if (typeof(TWebDriver).Name == "ChromeDriver") { ChromeOptions options = new ChromeOptions(); options.AddArguments("--incognito"); driver = new ChromeDriver(options); } else if (typeof(TWebDriver).Name == "FirefoxDriver") { FirefoxOptions options = new FirefoxOptions(); options.UseLegacyImplementation = false; options.SetPreference("browser.private.browsing.autostart", true); options.AddArgument("-private"); driver = new FirefoxDriver(options); } else if (typeof(TWebDriver).Name == "InternetExplorerDriver") { InternetExplorerOptions options = new InternetExplorerOptions(); options.BrowserCommandLineArguments = "-private"; options.EnsureCleanSession = true; options.IgnoreZoomLevel = true; options.EnablePersistentHover = true; driver = new InternetExplorerDriver(options); } else driver = new TWebDriver(); }