为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

素胚勾勒不出你 2023-07-28 10:08:42
我想知道一个工作框架或一种方法来自动化脚本,该脚本必须在网络和移动设备上运行单一场景。假设情况是,您已使用前台网络应用程序预订了从果阿运送到德里的货物,并且您已收到货件编号。现在,交付团队有一个移动应用程序,他们使用该应用程序不断更新货件状态:从源站出发,在途中,到达目的地。当交付团队更新移动应用程序上的状态时,当您作为用户跟踪货件编号时,此状态应反映在 Web 应用程序中。
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

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


您需要CreateDriver在一个类中实现两种不同的方法DriverManager- 一种用于 Appium 驱动程序(用于移动设备),另一种用于 Selenium WebDriver(用于 Web 浏览器)。您的测试用例需要指定何时从网络“切换”到移动设备,或从移动设备“切换”到网络。您还需要包含一种停止 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为您处理启动和停止每个驱动程序的驱动程序。该类还包含 Selenium WebDriver 和 Appium 驱动程序的实例。您编写的每个测试类都应该从此固定装置继承,以继承两个驱动程序实例。


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在测试类中使用的:


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();

    }

}

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


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信