我是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();
}
答案 0 :(得分:1)
看起来你需要测试链,但依赖于其他测试的测试指向设计缺陷。然而,有办法实现这一目标。您可以创建有序单元测试,这基本上是一个确保测试顺序的单个测试容器。
以下是MSDN的指南,您也可以使用播放列表
Right click on the test method -> Add to playlist -> New 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
}