自动化框架,用于自动化从 Web 应用程序到移动应用程序的场景

Automation framework to automate an scenarios from a web application to mobile application

我想知道一个工作框架或方法来自动化一个脚本,该脚本必须 运行 在网络和移动设备上针对单个场景。

假设情况是您使用前台 Web 应用程序预订了从果阿运送到德里的货物,并且您已经收到货物 number.Now 交付团队有一个移动应用程序,他们使用该应用程序不断更新货件状态为 – 从源站开始,在途中,已送达目的地。

当交付团队更新移动应用程序上的状态时,当您作为用户跟踪货件编号时,此状态应反映在 Web 应用程序中。

我过去处理过类似的问题,测试用例需要在移动和网络浏览器平台上进行测试。

您需要在 DriverManager class 中实现两种不同的 CreateDriver 方法 - 一种用于 Appium 驱动程序(用于移动设备),另一种用于 Selenium WebDriver(用于网络浏览器)。您的测试用例需要指定何时 'switch' 从网络到移动设备,或移动设备到网络。您还需要包含一个停止 Appium 服务器的方法,以便在从移动设备切换到 Web 时使用。这是一个小的通用示例,说明它是如何工作的:

public class DriverFactory
{

    private static AppiumLocalService _appiumLocalService;

    // use Current instance to act as static DriverFactory class instance
    private static DriverFactory _current;
    public static DriverFactory Current => _current ?? (_current = new DriverFactory());

    public AndroidDriver<AppiumWebElement> CreateAndroidDriver()
    {
        // start Appium server
        var builder = new AppiumServiceBuilder();
        _appiumLocalService = builder.UsingAnyFreePort().Build();
        _appiumLocalService.Start();

        // set desired capabilities or appium options here
        var options = new AppiumOptions {PlatformName = "Android"};

        // start AndroidDriver session
        var driver = new AndroidDriver<AppiumWebElement>(_appiumLocalService.ServiceUrl, options);

        return driver;
    }

    public void StopAppiumService()
    {
        // stop appium server
        _appiumLocalService.Dispose();

    }

    public IWebDriver CreateSeleniumDriver()
    {
        // create browser-specific webdriver here
        // return webdriver
    }
}

然后,您可以实现一个 BaseTestFixture 来为您处理启动和停止每个驱动程序。 class 还包含 Selenium WebDriver 和 Appium 驱动程序的实例。您编写的每个测试 class 都应该继承自这个固定装置,以继承两个驱动程序实例。

public class BaseTestFixture
{
    public static AndroidDriver<AppiumWebElement> AppiumDriver { get;set; }
    public static IWebDriver SeleniumDriver { get set; }

    public void SetAppiumDriver()
    {
        AppiumDriver = DriverFactory.Current.CreateAndroidDriver();
    }

    public void TearDownAppiumDriver()
    {
        AppiumDriver.Close();
        AppiumDriver.Quit();
        DriverFactory.Current.StopAppiumService();
    }

    public void SetSeleniumDriver()
    {
        SeleniumDriver = DriverFactory.Current.CreateSeleniumDriver();
    }

    public void TearDownSeleniumDriver()
    {
        SeleniumDriver.Close();
        SeleniumDriver.Quit();
    }
}

最后 -- 这里是 BaseTestFixture 如何在测试中使用 class:

using MyProject.BaseTestFixture;

[TestFixture]
public class MyTestClass : BaseTestFixture
{
    [Test]
    public void ShouldStartBothDrivers()
    {
        // set Appium driver -- we are testing with mobile
        SetAppiumDriver();

        // perform testing with Appium driver
        AppiumDriver.FindElement(.....);

        // finished mobile testing -- move to web browser
        TearDownAppiumDriver();

        // set Selenium driver -- web browser testing
        SetSeleniumDriver();

        // perform testing with Selenium driver
        SeleniumDriver.FindElement(....);

        // finished web browser testing -- close selenium driver
        TearDownSeleniumDriver();
    }
}

正如我所提到的,这是一个非常通用的示例,需要您进行自定义以满足您的特定需求。这只是两个驱动程序如何处理的示例架构。希望这会有所帮助。