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.
Немного более многословно, но очень легко управлять.