自动化框架,用于自动执行从 Web 应用程序到移动应用程序的方案



我想知道一个工作框架或一种方法来自动化脚本,该脚本必须在Web和移动设备上运行

。假设这种情况是,您已使用前台 Web 应用程序预订了从果阿到德里的货物,并且您收到了货件编号。现在,交付团队有一个移动应用程序,他们使用它不断更新货物的状态,如 - 从源站开始,在途中,在目的地交付。

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

我过去也遇到过类似的问题,其中测试用例需要在移动和Web浏览器平台上进行测试。

您需要在DriverManager类中实现两种不同的CreateDriver方法 - 一种用于 Appium 驱动程序(用于移动设备(,另一种用于 Selenium WebDriver(用于 Web 浏览器(。您的测试用例需要指定何时从 Web "切换到"移动设备,或何时从移动设备"切换到 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();
}
}

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

最新更新