Selenium Mobile последовательность для настройки методов испытаний, Сборка Инициализация и разборка - PullRequest
0 голосов
/ 23 января 2020

Как установить инициализацию сборки и демонтировать, а затем протестировать методы для Selen Mobile. Я пытался следовать последовательности, как мы делаем для селена, но для мобильных устройств это не сработало.

Вот код, который я сейчас использую для запуска моего драйвера. Я хотел бы запускать эту настройку перед каждым тестом, а также соответствующие этапы демонтажа после его завершения:

// start appium service
var builder = new AppiumServiceBuilder();
var appiumLocalService = builder.UsingAnyFreePort().Build();
appiumLocalService.Start();

// create appium driver capabilities
var options = new AppiumOptions { PlatformName = "Android" };
options.AddAdditionalCapability("deviceName", "Pixel 3a Pie 9.0 - API 28");

// add app or appPackage / appActivity depending on preference
options.AddAdditionalCapability("appPackage", "org.mozilla.firefox");
options.AddAdditionalCapability("appActivity", "org.mozilla.gecko.BrowserApp");

options.AddAdditionalCapability("udid", "emulator-5554");
options.AddAdditionalCapability("automationName", "UiAutomator2"); // this one is important

// these are optional, but I find them to be helpful -- see DesiredCapabilities Appium docs to learn more
options.AddAdditionalCapability("autoGrantPermissions", true);
options.AddAdditionalCapability("allowSessionOverride", true);


// start the driver
var driver = new AndroidDriver<IWebElement>(appiumLocalService.ServiceUrl, options);

1 Ответ

0 голосов
/ 23 января 2020

Если вы используете C# с NUnit, вы можете использовать атрибуты [SetUp] и [TearDown], включенные в NUnit, для выполнения sh этого. Если вы хотите применить этот сценарий ко всем своим тестам, вы можете поместить эти методы в отдельный класс Fixture, который будет наследовать каждый из этих методов.

Вот очень базовая установка c для получения вы начали:

public class Fixture
{
    public AndroidDriver<IWebElement> Driver { get; }
    private AppiumLocalService _appiumLocalService;

   [SetUp]
   public void StartDriver()
    {
        // start appium service
        var builder = new AppiumServiceBuilder();
        _appiumLocalService = builder.UsingAnyFreePort().Build();
        _appiumLocalService.Start();

         // create appium driver capabilities
        var options = new AppiumOptions { PlatformName = "Android" };
        options.AddAdditionalCapability("deviceName", "Pixel 3a Pie 9.0 - API 28");

        // add app or appPackage / appActivity depending on preference
        options.AddAdditionalCapability("appPackage", "org.mozilla.firefox");
        options.AddAdditionalCapability("appActivity", "org.mozilla.gecko.BrowserApp");

        options.AddAdditionalCapability("udid", "emulator-5554");
        options.AddAdditionalCapability("automationName", "UiAutomator2"); // this one is important

        // these are optional, but I find them to be helpful -- see DesiredCapabilities Appium docs to learn more
        options.AddAdditionalCapability("autoGrantPermissions", true);
        options.AddAdditionalCapability("allowSessionOverride", true);


        // set the driver global variable
        Driver = new AndroidDriver<IWebElement>(appiumLocalService.ServiceUrl, options);
    }

    [TearDown]
    public void CloseDriver()
    {
        Driver.Close(); // may need to change Driver.CloseApp();
        Driver.Quit();

        // stop appium service
        _appiumLocalService.Stop();
    }

Теперь, когда вы создаете класс для тестового случая, он будет выглядеть так:

public class MyTestClass : Fixture
{
    [Test]
    public void RunTest()
    {
        // perform test functions here such as FindElement and SendKeys
        Driver.FindElement("myElement");
    }

    [Test]
    public void RunAnotherTest()
    {
        // these tests use different driver instances, but that code will never have to be duplicated!
    }
}

Примечание , которое вы можете создать столько классов тестов, сколько вы хотите унаследовать от Fixture, и вам никогда не придется дублировать код объявления драйвера или даже вызывать его.

Теперь давайте разберем, что происходит Здесь. Атрибуты NUnit [Setup] и [TearDown] обозначают метод, который будет выполняться до того, как все будет помечено [Test]. Итак, если NUnit запускает метод [Test], он будет запускать [SetUp]> [Test]> [TearDown]. Это очень полезно, потому что вам не нужно дублировать код для действий, которые нужно повторять снова и снова.

В Fixture у нас есть глобальная переменная Driver, которая представляет AndroidDriver<> экземпляр для этого конкретного теста . Экземпляры Driver создаются с нуля в [SetUp] перед тестированием, используются во время метода [Test], и после завершения [Test], [TearDown] уничтожит экземпляр Driver. Процесс повторяется для каждого теста. Этот тип использования, когда мы создаем ровно один экземпляр объекта для повторного использования в процессе, называется Singleton Pattern .

Это гарантирует, что ваш Driver экземпляр не получит повторно используется между тестовыми примерами, что является предпочтительной практикой в ​​автоматизации тестирования.

Мы также объявили _appiumLocalService как частную переменную, потому что, хотя нам не нужно использовать эту переменную вне Fixture, нам все еще нужно повторно использовать переменную между [SetUp] и [TearDown], чтобы мы могли остановить службу Appium после завершения нашего теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...