使用WatiN控制重新初始化

时间:2012-04-03 07:39:21

标签: watin

我遇到了一种情况,当每次测试加载页面时,我需要重新初始化每个页面的控件。我已经在一个代码文件中分离了页面的控件声明,并在另一个代码文件中对这些控件执行了操作。

我已将这些操作暴露给测试用例,因此不会从测试用例传递任何控件。 我已经实现了Singleton用于控件初始化。因此,第一个测试用例可以解决任何问题。当第二次测试开始时,它会说“对象引用未设置为对象的实例”。尝试访问已初始化的控件时。

public partial class Login : Page
{
    protected TextField txtUserName;
    protected TextField txtPassword;
    protected TextField txtConPassword;

    public Login()
      {
        this.txtUserName = Util.Browser.TextField(Find.ById("username"));
        this.txtPassword = Util.Browser.TextField(Find.ById("password"));
        this.txtConPassword = Util.Browser.TextField(Find.ByValue("password"));
      }
 }



public partial class Login

  {
    /// <summary>

    /// Set user name.

    /// </summary>

    /// <param name="userName">User name.</param>

    public void SetUserName(string userName)
    {
        this.txtUserName.TypeText(userName);
        //Util.SetTextHelper(this.txtUserName, userName);
    }
 }

我想只有在Browser加载Document时才会初始化控件。当第一个测试结束时,浏览器将关闭并处理掉。因此,当使用Singleton实现控件初始化时,随着文档重新初始化浏览器(对于第二次测试),控件值会引发错误。

这个问题可以通过不实现Singleton来解决,但是在需要时重新初始化控件是没有意义的。

1 个答案:

答案 0 :(得分:0)

已更新!尝试使用WatiN FindBy属性...

public partial class LoginPage : Page
{
    [FindBy(Id = "username")]
    public TextField txtUserName;

    [FindBy(Id = "password")]
    public TextField txtPassword;

    [FindBy(Value = "password")]
    public TextField txtConPassword;
}

public partial class LoginPage
{
    public void SetUserName(string userName)
    {
        this.txtUserName.TypeText(userName);
    }
}

public void LoginTest()
{
    using (IE browser = new IE())
    {
        browser.GoTo("http://yourLoginPage.html");

        LoginPage loginPage = browser.Page<LoginPage>();
        loginPage.SetUserName("some_username");

        //Do your other stuff

        //If you haven't navigated away from the page this should still work
        //If not just grab the login page again: -
        //loginPage = browser.Page<LoginPage>();
        loginPage.SetUserName("some_other_username");
    }
}

HTH!