1 回答

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();
}
}
正如我所提到的,這是一個非常通用的示例,需要您進行自定義以滿足您的特定需求。這只是如何處理兩個驅動程序的示例架構。希望這可以幫助。
添加回答
舉報