// 变慢,所以

  public const string TimeToWaitForPageLoad = "30000";

  }


  public class TestLibrary


  {


  public UserOperationsHelper UserHelper { get; private set; }

  }


  public class TestClass

  {


  [TestMethod]


  public void LogOnTest()


  {

  var username = "donjuan";


  var password = "它是个秘密";

  TestLibrary.UserHelper.LogOn(username, password);

  // 在测试过程中,我们发现这个链接是


  // 根据用户名而变的,为了扩展性,动态生成其标识文本


  selenium.Click(string.Format("link={0}", username));

  selenium.WaitForPageToLoad(Consts.TimeToWaitForPageLoad);


  selenium.Click("link=博客");

  selenium.WaitForPageToLoad(Consts.TimeToWaitForPageLoad);

  // 执行一些必要的测试验证过程


  Assert.IsTrue(selenium.IsTextPresented(...));

  }

  }


  这里稍微解释一下,创建自动化测试代码,是为了节省手工重复测试的工作量以及测试失误的风险。但只要是代码,都会有可能出错,因此自动化测试框架里面创建了一个CaseErrorException,这样在每次分析测试用例失败的时候,可以一眼区分开测试代码的错误和产品代码中的错误。例如在UserOperationHelper.LogOn函数中的参数检查,当然啦,在测试过程当中,有可能需要测试不输入用户名或者密码的情况下,验证登录界面是否正常工作的情况。因此在验证参数的时候,特意为这种情况留下了String.Empty的入口,而对于null值,则基本上可以判断是因为测试人员在编写代码上的失误(具体原因会在数据驱动测试里面讲到)。


  至于TestLibrary的初始化,完全可以放到每一个测试类型的TestInitializer里面,如下表所示:


[TestClass]


public class AddBlogTest


{


    private TestContext testContextInstance;


    public TestContext TestContext

    {

        get

        {

                return testContextInstance;


        }

        set


        {

            testContextInstance = value;

        }


    }


    private TestLibrary TestLibrary;


    private ISelenium selenium;

 

    [TestInitialize]

    public void SetupTest()


    {


        TestLibrary = TestLibrary.SetupTest(TestContext);


        selenium = TestLibrary.Selenium;

    }

 

    [TestCleanup]

    public void TeardownTest()

    {


        TestLibrary.Shutdown();


    }


}