如何在不关闭它的情况下在同一个浏览器实例中运行多个测试方法(C#,SeleniumWebDriverz NUnit)?

时间:2015-08-11 11:38:40

标签: c# selenium testing selenium-webdriver automated-tests

我是c#和Selenium的初学者。我想知道是否可以在相同的浏览器实例中运行多个[TestMethod] -s而不关闭它?

例如在“Can_Change_Name_And_Title”完成后,我想继续“Can_Change_Profile_Picture”。

    [TestMethod]
    public void Can_Change_Name_And_Title()
    {
        SidebarNavigation.MyProfile.GoTo();
        ProfilePages.SetNewName("John Doe").SetNewTitle("New Title Test").ChangeNameTitle();
    }

    [TestMethod]
    public void Can_Change_Profile_Picture()
    {
        SidebarNavigation.MyProfile.GoTo();
        ProfilePages.SetNewProfilePicture(Driver.BaseFilePath + "Profile.png").ChangeProfilePicture();
    }

4 个答案:

答案 0 :(得分:1)

看起来你需要测试链,但依赖于其他测试的测试指向设计缺陷。然而,有办法实现这一目标。您可以创建有序单元测试,这基本上是一个确保测试顺序的单个测试容器。

以下是MSDN的指南,您也可以使用播放列表

Right click on the test method -> Add to playlist -> New playlist

执行顺序将在您将其添加到播放列表时,但如果您想要更改它,则您拥有该文件

Playlist

如果您需要在执行期间保留测试数据/对象,您可以使用一些全局变量。我正在使用这样的TestDataStore:

private Dictionary<string, yourObjData> _dataStore = new Dictionary<string, yourObjData>();

因此,您可以随时添加和检索所需内容(包括会话详细信息,网络驱动程序等)。

答案 1 :(得分:1)

好的,所以这里是我找到的解决方案。而不是:

 using Microsoft.VisualStudio.TestTools.UnitTesting;

我用过:

 using NUnit.Framework;

所以现在我有下一个层次结构:

[TestFixture]
 [TestFixtureSetup] // this is where I initialize my WebDriver " new FirefoxDriver(); "
  [Test] //this is my first test
    public void Can_Change_Name_And_Title()
    {
        SidebarNavigation.MyProfile.GoTo();
        ProfilePages.SetNewName("John Doe").SetNewTitle("New Title Test").ChangeNameTitle();
    }
  [Test] //this is my second test
    public void Can_Change_Profile_Picture()
    {
        SidebarNavigation.MyProfile.GoTo();
        ProfilePages.SetNewProfilePicture(Driver.BaseFilePath + "Profile.png").ChangeProfilePicture();
    }

[TestFixtureTearDown] // this is where I close my driver

通过这些更改,我的浏览器只会打开一次TestFixture(或TestClass,如果您使用&#34;使用Microsoft.VisualStudio.TestTools.UnitTesting;&#34;)并且该夹具中的所有[Test] -s将打开在同一个浏览器实例中运行。完成所有测试后,浏览器将关闭。

希望这将有助于其他人。问我是否需要其他帮助。

答案 2 :(得分:0)

您可以将selenium属性restart.browser.each.scenario设置为false,这可能已经成为您的诀窍。在Java中,您可以使用

设置此属性

System.setProperty("restart.browser.each.scenario", "false");

我认为在C#中它会像

System.Environment.SetEnvironmentVariable("restart.browser.each.scenario","false");

答案 3 :(得分:0)

HI如果您使用的是NUnit.Framework;

代码执行计划如下所示。                                首次测试用例

[TestFixtureSetup]   ---->For each test case this will work so here we can          
                          initialize  the driver instance.              
[TestMethod]         ----->test method will goes here
[TearDown]           -----> clean up code
                         **For Second Test Case**
[TestFixtureSetup]               
[TestMethod]
[TearDown]

如果必须在一个浏览器实例中运行两个测试用例 不要关闭TearDown内的驱动程序。 并在TextFixtureSetup下初始化驱动程序

    [TestFixture()]
        public class TestClass
        {

            [TestFixtureSetUp]
            public void Init()
            {
                Driver.initialize(new InternetExplorerDriver());
            }
            [TearDown]
           public void Close()
            {
//dont do any driver.close()
            }
         [TestMethod]
        public void TestCase001()
        {
        //your code goes here
        }
 [TestMethod]
        public void TestCase002()
        {
        //your code goes here
        }