我刚开始通过selenium webdriver学习自动化的基础知识,我正在努力“清理”我写的测试。我将每个测试分成了解决方案中自己的案例;但是,由于每个测试用例具有相同的设置和拆卸,显然对于解决方案中的每个单独测试用例执行这两者都是多余的。有没有办法在所有测试运行之前执行一次设置,并且在测试完成后一次完成拆卸?
以下是一个示例测试用例:
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
namespace SeleniumTests
{
[TestFixture]
public class TestCase3Final
{
private IWebDriver driver;
private StringBuilder verificationErrors;
private string baseURL;
private bool acceptNextAlert = true;
[SetUp]
public void SetupTest()
{
driver = new FirefoxDriver();
baseURL = "http://adam.goucher.ca/parkcalc/index.php";
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
try
{
driver.Quit();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
[Test]
public void TestCase3()
{
driver.Navigate().GoToUrl(baseURL);
driver.FindElement(By.Id("EntryDate")).Clear();
driver.FindElement(By.Id("EntryDate")).SendKeys("01/02/2014");
driver.FindElement(By.Id("ExitDate")).Clear();
driver.FindElement(By.Id("ExitDate")).SendKeys("01/01/2014");
driver.FindElement(By.Name("Submit")).Click();
try
{
Assert.AreEqual("ERROR! YOUR EXIT DATE OR TIME IS BEFORE YOUR ENTRY DATE OR TIME", driver.FindElement(By.CssSelector("b")).Text.Trim());
}
catch (AssertionException e)
{
verificationErrors.Append(e.Message);
}
}
private bool IsElementPresent(By by)
{
try
{
driver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
private bool IsAlertPresent()
{
try
{
driver.SwitchTo().Alert();
return true;
}
catch (NoAlertPresentException)
{
return false;
}
}
private string CloseAlertAndGetItsText() {
try {
IAlert alert = driver.SwitchTo().Alert();
string alertText = alert.Text;
if (acceptNextAlert) {
alert.Accept();
} else {
alert.Dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}
}
谢谢!
答案 0 :(得分:0)
通过使用基类并为方法分配属性,因此NUnit仍然可以理解基本测试夹具。
[TestFixture]
public class TestCase3Final : BaseTestFixture
...
public class BaseTestFixture {
[TestFixtureSetup]
public void SetupStuff() {
// set up driver here using a [TestFixtureSetup] attribute
// it will be run for every class that inherits from it.
}
}
所以有一个基础测试夹具,所有其他人继承,只要它们从它继承,那么将为每一个调用设置方法。
注意,您的测试来自IDE或某些录制和播放。自动化+正确“清理测试”之类的东西要求您对所使用的语言有一定的了解,并了解OO原则。