我想知道一个工作框架或方法来自动化一个脚本,该脚本必须在单个场景中同时在Web和移动设备上运行。
假设情况是您已经使用前台办公室Web应用程序预订了从果阿运往德里的货物,并且您已经收到了货运号。现在,交付团队有了一个移动应用程序,他们可以使用该应用程序不断更新货运状态如–从源站点开始,在途中,在目的地中交付。
当交付团队更新移动应用程序上的状态时,当您以用户身份跟踪发货编号时,此状态应反映在Web应用程序中。
过去我曾处理过类似的问题,其中一个测试用例需要同时在移动和网络浏览器平台上进行测试。
您需要在CreateDriver
类中实现两种不同的DriverManager
方法-一种用于Appium驱动程序(用于移动设备),另一种用于Selenium WebDriver(用于Web浏览器)。您的测试用例将需要指定何时从Web“切换”到移动设备,或从“移动”到Web。您还需要提供一种停止Appium服务器的方法,以便在从移动设备切换到网络时使用。这是一个工作原理的小示例:
public class DriverFactory
{
// 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
// set desired capabilities
// start AndroidDriver session
// return AndroidDriver
}
public void StopAppiumService()
{
// stop appium server
}
public IWebDriver CreateSeleniumDriver()
{
// create browser-specific webdriver here
// return webdriver
}
}
然后,您可以实现一个BaseTestFixture
来为您处理启动和停止每个驱动程序。此类还包含Selenium WebDriver和Appium驱动程序的实例。您编写的每个测试类都应从此Fixture继承,以继承两个驱动程序实例。
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
如何在Test类中使用的方式:
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();
}
}
正如我所提到的,这是一个非常通用的示例,将需要在您端进行自定义以满足您的特定需求。这只是有关如何处理两个驱动程序的示例架构。希望这会有所帮助。