硒移动序列设置测试方法,程序集初始化和拆卸



我将如何设置程序集初始化和拆卸,然后测试硒移动的方法。 我试图像我们对硒所做的那样遵循顺序,但对于移动设备来说,它没有成功。

这是我当前用于启动驱动程序的代码。我想在每次测试之前运行此设置,并在测试完成后运行适当的拆卸步骤:

// start appium service
var builder = new AppiumServiceBuilder();
var appiumLocalService = builder.UsingAnyFreePort().Build();
appiumLocalService.Start();
// create appium driver capabilities
var options = new AppiumOptions { PlatformName = "Android" };
options.AddAdditionalCapability("deviceName", "Pixel 3a Pie 9.0 - API 28");
// add app or appPackage / appActivity depending on preference
options.AddAdditionalCapability("appPackage", "org.mozilla.firefox");
options.AddAdditionalCapability("appActivity", "org.mozilla.gecko.BrowserApp");
options.AddAdditionalCapability("udid", "emulator-5554");
options.AddAdditionalCapability("automationName", "UiAutomator2"); // this one is important
// these are optional, but I find them to be helpful -- see DesiredCapabilities Appium docs to learn more
options.AddAdditionalCapability("autoGrantPermissions", true);
options.AddAdditionalCapability("allowSessionOverride", true);

// start the driver
var driver = new AndroidDriver<IWebElement>(appiumLocalService.ServiceUrl, options);

如果将 C# 与 NUnit 配合使用,则可以使用包含的 NUnit[SetUp][TearDown]属性来完成此操作。如果要将此方案应用于所有测试,可以将这些方法放入将继承其中每个方法的单独Fixture类中。

这是一个非常基本的设置,可帮助您入门:

public class Fixture
{
public AndroidDriver<IWebElement> Driver { get; }
private AppiumLocalService _appiumLocalService;
[SetUp]
public void StartDriver()
{
// start appium service
var builder = new AppiumServiceBuilder();
_appiumLocalService = builder.UsingAnyFreePort().Build();
_appiumLocalService.Start();
// create appium driver capabilities
var options = new AppiumOptions { PlatformName = "Android" };
options.AddAdditionalCapability("deviceName", "Pixel 3a Pie 9.0 - API 28");
// add app or appPackage / appActivity depending on preference
options.AddAdditionalCapability("appPackage", "org.mozilla.firefox");
options.AddAdditionalCapability("appActivity", "org.mozilla.gecko.BrowserApp");
options.AddAdditionalCapability("udid", "emulator-5554");
options.AddAdditionalCapability("automationName", "UiAutomator2"); // this one is important
// these are optional, but I find them to be helpful -- see DesiredCapabilities Appium docs to learn more
options.AddAdditionalCapability("autoGrantPermissions", true);
options.AddAdditionalCapability("allowSessionOverride", true);

// set the driver global variable
Driver = new AndroidDriver<IWebElement>(appiumLocalService.ServiceUrl, options);
}
[TearDown]
public void CloseDriver()
{
Driver.Close(); // may need to change Driver.CloseApp();
Driver.Quit();
// stop appium service
_appiumLocalService.Stop();
}

现在,当您为测试用例创建一个类时,它将如下所示:

public class MyTestClass : Fixture
{
[Test]
public void RunTest()
{
// perform test functions here such as FindElement and SendKeys
Driver.FindElement("myElement");
}
[Test]
public void RunAnotherTest()
{
// these tests use different driver instances, but that code will never have to be duplicated!
}
}

请注意,您可以创建任意数量的测试类,只要要从Fixture继承,并且永远不必复制驱动程序声明代码,甚至不必调用它。

现在,让我们分解一下这里发生的事情。NUnit[Setup][TearDown]属性指定一个方法,该方法将在标记为[Test]的所有内容之前运行。因此,如果 NUnit 运行[Test]方法,它将运行[SetUp]>[Test]>[TearDown]。这非常有用,因为您不必为需要一遍又一遍重复的操作复制代码。

Fixture中,我们有一个全局Driver变量,它表示这个特定测试AndroidDriver<>实例。Driver实例是在测试前[SetUp]从头开始创建的,在[Test]方法期间使用,一旦[Test]完成,[TearDown]将销毁Driver实例。该过程对每个测试重复。这种类型的用法,即我们只创建一个对象的实例,以便在整个过程中重用,称为单例模式。

这可确保Driver实例不会在测试用例之间重复使用,这是测试自动化中的首选做法。

我们还将_appiumLocalService声明为私有变量,因为虽然我们不需要在Fixture之外使用此变量,但我们仍然需要在[SetUp][TearDown]之间重用该变量,以便在测试完成后停止 Appium 服务。

最新更新