Два метода испытаний не работают одновременно в Watin, Gallio и MbUnit - PullRequest
0 голосов
/ 19 октября 2011

Когда я пишу этот кусок кода, он отлично работает

using System;
using WatiN.Core;
using MbUnit.Framework;
using Gallio.Framework;
using System.Text.RegularExpressions;
using System.Collections;
using System.IO;
using System.Drawing;
using Gallio.Model;

namespace DialogHandlerTestWithWatin
{
[TestFixture]
class Program
{
    //This is WatiN - create IE instance
    public static IE ie = new IE();
    [SetUp]
    public void DoTestSetup()
    {
        IE.Settings.WaitForCompleteTimeOut = 60;
    }
    [TearDown]
    public static void TestNavigateToMedappz()
    {
        if (ie != null)
        {
            if (TestContext.CurrentContext.Outcome == TestOutcome.Failed)
            {
                Assert.Fail("Unable to navigate to the medappz application");
                ie.Close();
                ie.Dispose();
                ie = null;
            }
        }
    }


    //This funcn navigate us to the Medappz Application
    [Test]
    public static void NavigateToMedappz()
    {
        using (TestLog.BeginSection("Go to Medappz"))
        {
            Assert.IsNotNull(ie);
            ie.GoTo("http://192.168.10.82/Sage/");
            ie.ShowWindow(NativeMethods.WindowShowStyle.Maximize);
        }
        //This is NUnit - check that ie instance is not null
        Assert.IsNotNull(ie, "Error creating IE instance.");
        Assert.AreEqual("Login Page", ie.Title);

    }

Но когда я добавляю другой метод тестирования в этот код как

    [TearDown]
    public static void TestLoginToMedappz()
    {
        if (ie != null)
        {
            if (TestContext.CurrentContext.Outcome == TestOutcome.Failed)
            {
                Assert.Fail("Unable to Login");
            }
        }
    }
    [Test]
    public static void LoginToMedappz()
    {
        using (TestLog.BeginSection("Login to Medappz"))
        {
            TextField UserName = ie.TextField(Find.ByName("txtUserName"));
            UserName.TypeText("<username>");
            TextField Password = ie.TextField(Find.ByName("txtPassword"));
            Assert.IsTrue(UserName.Exists, "UserName Textbox does not exist");
            Assert.IsTrue(Password.Exists, "Password Textbox does not exist");
            Password.TypeText("<password>");
            Button btnLogin = ie.Button(Find.ByName("btnLogin"));
            Assert.IsTrue(btnLogin.Exists, "btnLogin button does not exist");
            btnLogin.Blur();
            btnLogin.Click();
        }
    }

Затем тест начал проваливаться, открывается только пустое окно IE, и через несколько секунд выполняется первый метод тестирования, но второй метод не выполняется. В отчете Gallio говорится:

Root 110 Результаты: 2 пробега, 1 пройдено, 1 провал, 0 безрезультатно, 0 пропущено Продолжительность: 44.042 с Утверждений: 3 WatiN.Core.Exceptions.ElementNotFoundException: Не удалось найти INPUT (текстовая область текста скрыта) или критерии соответствия тега элемента TEXTAREA: атрибут 'name' со значением 'txtUserName'

Ответы [ 2 ]

0 голосов
/ 19 октября 2011

Вот что я думаю, вы пытаетесь сделать ...

У вас есть два теста здесь.Тест NavigateToMedappz пытается перейти к вашему приложению.Сначала тест LoginToMedappz пытается перейти к вашему приложению, а затем пытается войти в систему.

[TestFixture]
public class MedappzTests
{
    private IE ie;

    [SetUp]
    public void DoTestSetup()
    {
        ie = new IE();
    }

    [TearDown]
    public void DoTestTeardown()
    {
        if (ie != null)
        {
            ie.Close();
            ie.Dispose();
            ie = null;
        }
    }

    [Test]
    public void NavigateToMedappz()
    {
        //...
    }

    [Test]
    public void LoginToMedappz()
    {
        NavigateToMedappz();
        //...
        //Here I'm assuming that if you've successfully logged in then the login button should no longer exist
        Assert.IsFalse(btnLogin.Exists);
    }
}

HTH!

0 голосов
/ 19 октября 2011

Являются ли два теста в одном классе?Я никогда не видел два демонтажа в одном классе.Кроме того, если TestNavigateToMedappz вызывается до LoginToMedappz, то ваша переменная ie будет уже удалена.Как насчет того, чтобы у вас был только один разбор, тогда при запуске LoginToMedappz вы вызываете NavigateToMedappz?

...