我们如何利用单元/测试类文件中所有文件共享的常用方法(如登录方法)?

时间:2014-08-12 04:00:06

标签: c# unit-testing selenium-webdriver nunit

我是selenium webdriver的新手。我在每个单元测试中有七个不同的单元测试和不同的测试方法,我使用相同的网站并在每个单元测试中登录详细信息。有没有办法只创建一个文件或Testfixturesetup或任何东西?并在每个单元测试中使用该文件的引用,以便我可以在一个影响所有Testmethods的地方更改登录详细信息。

IWebDriver driver = new FirefoxDriver();

driver.Navigate().GoToUrl("example.com);
driver.Manage().Window.Maximize();


IWebElement email = driver.FindElement(By.Id("Email"));
email.SendKeys("abc@xyz.com");

IWebElement password = driver.FindElement(By.Id("Password"));
password.SendKeys("abcdef");
System.Threading.Thread.Sleep(500);

IWebElement login = driver.FindElement(By.XPath("//button[contains(.,'Log In')]"));
login.Submit();
System.Threading.Thread.Sleep(500);

有没有办法在一个文件中创建这些代码行?并在单元测试中使用其参考。所以每次我尝试运行testmethod时,首先进入门户并登录,以便于维护代码。如果我想更改登录详细信息,以便我可以在一个地方更改。请专家需要你的帮助。提前致谢。

2 个答案:

答案 0 :(得分:2)

您发布的问题与Selenium无关。基本上你需要运行几个语句(如上所示)作为每个测试的一部分,这些语句存在于一个测试类文件中。

正如您所建议的那样,'TestfixtureSetup'和'TestFixtureTearDown'可用于单元测试,不能用于测试方法。对于测试方法,您需要使用TestInitialize和TestCleanUp来实现它。

我建议创建基类,它包含常用方法(如登录)并将该类继承到所需的单元测试类/测试类文件。并在Initializing部分调用相关方法。

public class TestBase
{
    IWebDriver driver;

    public TestBase()
    {
       driver = new FirefoxDriver();
       driver.Navigate().GoToUrl("example.com);
       driver.Manage().Window.Maximize();
    }

    public void Login()
    {       
       IWebElement email = driver.FindElement(By.Id("Email"));
       email.SendKeys("abc@xyz.com");

       IWebElement password = driver.FindElement(By.Id("Password"));
       password.SendKeys("abcdef");
       System.Threading.Thread.Sleep(500);

       IWebElement login = driver.FindElement(By.XPath("//button[contains(.,'LogIn')]"));
       login.Submit();
       System.Threading.Thread.Sleep(500);
    }
}

[TestClass]
public class LoginTests : TestBase
{
    [TestInitialize]
    public void MyTestInit()
    {
        Login();
    }

    [TestCleanup]
    public void MyTestCleanUp()
    {
        LogOut(); // Implement log out functionality.
    }

    [TestMethod]
    public void LoginTestOne()
    {    
       // test method logic here.
    }
}

(伪代码 - 未遵守)

答案 1 :(得分:0)

您可以使用不同的单元测试框架进行硒测试 -

  1. NUnit的
  2. CSunit
  3. Visual Studio测试框架
  4. MbUnit的
  5. 所有这些框架都支持某种形式的[setup]和[teardown]属性,以便您可以应用各种设置并创建可在多个测试中使用的全局对象。

    如果您使用的是VS集成单元测试框架,请参阅以下方法 -

    1. [ClassInitialize],[ClassCleanup] - 为每个受测试类件调用
    2. [TestInitialize],[TestCleanup] - 为每个受测试方法调用
    3. [AssemblyInitialize],[AssemblyCleanup] - 为每个受测试的组件调用
    4. 更多详情 - http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.classinitializeattribute.aspx

      Nunit也有类似的东西,例如[SetUp],[TeaDown],[TestFixtureSetUp],[TestFixtureTearDown]。 更多详情 - http://www.nunit.org/index.php?p=setupFixture&r=2.4