Selenium, FluentAutomation & NUnit - как переключать браузеры для каждого TestCase?

В настоящее время openGoogle() вызывается для каждого теста с правильными параметрами. Проблема в том, что setBrowser не работает должным образом. Он устанавливает первый раз и успешно завершает тест. Однако, когда openGoogle() вызывается во второй раз, он продолжает использовать первый браузер вместо того, чтобы использовать новый указанный браузер.

используя NFramework = NUnit.Framework; ...

   [NFramework.TestFixture]
    public class SampleTest : FluentAutomation.FluentTest
    {
        string path;
        private Action<TinyIoCContainer> currentRegistration;
        public TestContext TestContext { get; set; }

        [NFramework.SetUp]
        public void Init()
        {
            FluentAutomation.Settings.ScreenshotOnFailedExpect = true;
            FluentAutomation.Settings.ScreenshotOnFailedAction = true;
            FluentAutomation.Settings.DefaultWaitTimeout = TimeSpan.FromSeconds(1);
            FluentAutomation.Settings.DefaultWaitUntilTimeout = TimeSpan.FromSeconds(30);
            FluentAutomation.Settings.MinimizeAllWindowsOnTestStart = false;
            FluentAutomation.Settings.ScreenshotPath = path = "C:\\ScreenShots";
        }

        [NFramework.Test]
        [NFramework.TestCase(SeleniumWebDriver.Browser.Firefox)]
        [NFramework.TestCase(SeleniumWebDriver.Browser.InternetExplorer)]
        public void openGoogle(SeleniumWebDriver.Browser browser)
        {
            setBrowser(browser);

            I.Open("http://www.google.com/");
            I.WaitUntil(() => I.Expect.Exists("body"));
            I.Enter("Unit Testing").In("input[name=q]");
            I.TakeScreenshot(browser + "EnterText");

            I.Click("button[name=btnG]");
            I.WaitUntil(() => I.Expect.Exists(".mw"));
            I.TakeScreenshot(browser + "ClickSearch");
        }

        public SampleTest()
        {
            currentRegistration = FluentAutomation.Settings.Registration;
        }

        private void setBrowser(SeleniumWebDriver.Browser browser)
        {
            switch (browser)
            {
                case SeleniumWebDriver.Browser.InternetExplorer:
                case SeleniumWebDriver.Browser.Firefox:
                    FluentAutomation.SeleniumWebDriver.Bootstrap(browser);
                    break;
            }
        }
    }

Примечание. Выполнение этого нижеприведенного кода работает правильно - открытие отдельного браузера для каждого теста.

открытый класс SampleTest: FluentAutomation.FluentTest {строка пути; личное действие currentRegistration; public TestContext TestContext { get; задавать; }

private void ie()
{
    FluentAutomation.SeleniumWebDriver.Bootstrap(FluentAutomation.SeleniumWebDriver.Browser.InternetExplorer);
}
private void ff()
{
    >FluentAutomation.SeleniumWebDriver.Bootstrap(FluentAutomation.SeleniumWebDriver.Browser.Firefox);
}

public SampleTest()
{
    //ff
    FluentAutomation.SeleniumWebDriver.Bootstrap();
    currentRegistration = FluentAutomation.Settings.Registration;
}

[TestInitialize]
public void Initialize()
{
    FluentAutomation.Settings.ScreenshotOnFailedExpect = true;
    FluentAutomation.Settings.ScreenshotOnFailedAction = true;
    FluentAutomation.Settings.DefaultWaitTimeout = TimeSpan.FromSeconds(1);
    FluentAutomation.Settings.DefaultWaitUntilTimeout = TimeSpan.FromSeconds(30);
    FluentAutomation.Settings.MinimizeAllWindowsOnTestStart = false;
    path = TestContext.TestResultsDirectory;
    FluentAutomation.Settings.ScreenshotPath = path;
}

[TestMethod]
public void OpenGoogleIE()
{
    ie();
    openGoogle("IE");
}
[TestMethod]
public void OpenGoogleFF()
{
    ff();
    openGoogle("FF");
}
private void openGoogle(string browser)
{
    I.Open("http://www.google.com/");
    I.WaitUntil(() => I.Expect.Exists("body"));
    I.Enter("Unit Testing").In("input[name=q]");
    I.TakeScreenshot(browser + "EnterText");

    I.Click("button[name=btnG]");
    I.WaitUntil(() => I.Expect.Exists(".mw"));
    I.TakeScreenshot(browser + "ClickSearch");

} }

1 ответ

Решение

Ветвь Dev: последние биты в ветке Dev хорошо сочетаются с параметризованными тестовыми примерами NUnit по моему опыту.

Просто переместите вызов Bootstrap внутрь самого тестового случая и убедитесь, что вы вручную вызываете I.Dispose() в конце. Это позволяет правильно создавать браузер при запуске в этом контексте.

Вот пример, который вы сможете копировать / вставлять и запускать, если вы извлекаете последнюю версию из GitHub в ветке dev.

    [TestCase(FluentAutomation.SeleniumWebDriver.Browser.InternetExplorer)]
    [TestCase(FluentAutomation.SeleniumWebDriver.Browser.Chrome)]
    public void CartTest(FluentAutomation.SeleniumWebDriver.Browser browser)
    {
        FluentAutomation.SeleniumWebDriver.Bootstrap(browser);
        I.Open("http://automation.apphb.com/forms");
        I.Select("Motorcycles").From(".liveExample tr select:eq(0)"); // Select by value/text
        I.Select(2).From(".liveExample tr select:eq(1)"); // Select by index
        I.Enter(6).In(".liveExample td.quantity input:eq(0)");
        I.Expect.Text("$197.70").In(".liveExample tr span:eq(1)");

        // add second product
        I.Click(".liveExample button:eq(0)");
        I.Select(1).From(".liveExample tr select:eq(2)");
        I.Select(4).From(".liveExample tr select:eq(3)");
        I.Enter(8).In(".liveExample td.quantity input:eq(1)");
        I.Expect.Text("$788.64").In(".liveExample tr span:eq(3)");

        // validate totals
        I.Expect.Text("$986.34").In("p.grandTotal span");

        // remove first product
        I.Click(".liveExample a:eq(0)");

        // validate new total
        I.WaitUntil(() => I.Expect.Text("$788.64").In("p.grandTotal span"));
        I.Dispose();
    }

Он должен найти путь к NuGet в следующем выпуске, который, я надеюсь, произойдет на этой неделе.

NuGet v2.0: в настоящее время поддерживается только один вызов Bootstrap для каждого теста. В v1 мы имели встроенную поддержку для запуска одного и того же теста для всех браузеров, поддерживаемых поставщиком, но обнаружили, что пользователи предпочитают разделять его на несколько тестов.

То, как я справляюсь с v2, - это наличие базового TestClass, в котором есть TestMethods. Затем я расширяю его один раз для каждого браузера, на который хочу нацелиться, и переопределяю конструктор, чтобы вызвать соответствующий метод Bootstrap.

Немного более многословно, но очень легко управлять.

Другие вопросы по тегам