5

NUnitテストとして記述された複数の機能テストがあります。これらは互いに独立しており、一度に1つずつ実行すると正常に機能します。しかし、すべてのテストを選択して一度に実行すると、最初のテストを実行した後にWebドライバー変数がクラッシュします。TestFixtureTearDownメソッドを使用すると、すべてのテストが実行されますが、多くのブラウザーが開いてしまいます。TearDown内でQuit()メソッドとClose()メソッドを使用してみました。各テストの実行後にブラウザを閉じるが、テスト全体をクラッシュさせないTearDownメソッドを作成するにはどうすればよいですか?私はあなたの助けを切実に必要としているので、私がそれを試してみることにオープンであるかもしれない何かを提案してください。これは、テストの実行後に発生するエラーです。

AFT.AministratorPageTest("firefox").SuperAdminAssignsPermissionsOfAdmin-catalyst:
  OpenQA.Selenium.WebDriverException : Unexpected error. System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:7055
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
at System.Net.HttpWebRequest.GetRequestStream()
at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
TearDown : System.InvalidOperationException : No process is associated with this object.

これは、他のすべてのテストが継承する抽象クラスです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;

using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Support;


namespace BusinessLayer
{
    [TestFixture("ie")]
    [TestFixture("firefox")]
     public abstract class BaseTest 
    {
        public IWebDriver browser { get; set; }
        public String driverName;

        /// <summary>
        /// Required No Argument Constructor
        /// </summary>
        public BaseTest()
        { }

        /// <summary>
        /// Constructor to allow for TestFixture parameterization
        /// </summary>
        /// <param name="name"></param>
        public BaseTest(string name)
        { 
            this.driverName = name; 
        }

        /// <summary>
        /// Loads Browser into the TestFixture
        /// </summary>
        [TestFixtureSetUp]
        public void CreateDriver()
        {
            if (driverName != null)
            {
                this.browser = (IWebDriver)Browser.GetBrowser(driverName);
            }
            else
            {
                throw new Exception("DriverName cannot be null");
            }
        }

        /// <summary>
        /// Insures browser is destroyed at conclusion of test
        /// </summary>
        [TestFixtureTearDown]
        public void FlushBrowser()
        {
            browser.Quit();
            browser = null;
        }
    }
}

そしてこれは私のテストの1つです

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using OpenQA.Selenium;
using NUnit.Framework;
using BusinessLayer;
using BusinessLayer.Pages;
using System.Threading;


namespace Pegged_AFT
{
    class ScreeningProcessTests : BaseTest
    {
        public ScreeningProcessTests()
            : base()
        { }

        public ScreeningProcessTests(string name)
            : base(name)
        { }

       [Test]
        public void TestHappyPathToRegistration()
        {
            User user = new User().GetCandidate();

            Components components = new Components(
                    browser: Browser.GetBrowser(driverName),
                    client: new Client("test"),
                    user: user,
                    credentials: new Credentials(user.emailAddress, user.password)
                    );

            AddUserPage addUser = new AddUserPage(components);
            addUser.AddUser(user);

            Screening screening = new Screening(components);
            screening.Registration();

            screening.InitPage(new TestPage(components));
            Assert.AreEqual(screening.testPage.TryToFindElement(By.Id("ctl00_ContentPlaceHolder1_lblSectionName")).Text, "Candidate Registration");

        }
}

Webアプリの実行に必要なすべてのユーザー変数とWebドライバー変数を処理するために作成したクラスは、どのコンポーネントなのか疑問に思っている人がいます。ページオブジェクトを作成するたびにインスタンス化されます。

4

1 に答える 1

8

私はついに自分の問題を理解しました。ブラウザドライバを設定したメソッド「Browser.GetBrowser(driverName)」(まだ作業していません)は、ブラウザの新しいインスタンスを作成していませんでした。代わりに、最初に作成されたブラウザを再利用していました。したがって、ブラウザが使用された後のクラッシュと最初のテストでの分解。Browser.GetBrowser(driverName)メソッドで、NUnitテストのSetUpメソッド内にIWebDriverの新しいインスタンスを作成することで、問題を解決できます。

于 2012-08-02T18:24:34.153 に答える