Два метода тестирования не работают одновременно в Watin, Gallio и MbUnit

#c# #watin #automated-tests

#c# #watin #автоматизированные тесты

Вопрос:

Когда я пишу этот фрагмент кода, он работает нормально

 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: не удалось найти ВХОДНЫЕ данные (текстовый пароль textarea скрыт) или критерии соответствия тега элемента TEXTAREA: атрибут ‘name’ со значением ‘txtUserName’

Ответ №1:

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

Комментарии:

1. Выполнение того, что вы говорите, вызовет переход к Medappz два раза … не так ли

Ответ №2:

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

Здесь у вас есть два теста. Тест 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!