使用c#/selenium设置避免冗余

本文关键字:冗余 设置 selenium 使用 | 更新日期: 2023-09-27 18:18:18

我刚刚开始通过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;
        }
    }
    }
}

谢谢! !

使用c#/selenium设置避免冗余

通过使用基类并为方法分配属性,这样NUnit仍然可以理解基本测试fixture。

[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原则。