4

I am trying to set up a selenium framework to test a application on an android emulator. However I keep getting a warning that DesiredCapabilities is obsolete. I cant find any information on this apart from that relation to browsers. But in my framework I am trying to test a native application.

Code:

    [TestMethod]
    public void Test_Open_Mobile_App()
    {
        DesiredCapabilities cap = new DesiredCapabilities();

        //set the emulator
        cap.SetCapability("platformVersion", "8.1");
        cap.SetCapability("platformName", "Android");
        cap.SetCapability("deviceName", "Device 01 Oreo_1440x2560");
        cap.SetCapability("udid", "emulator-5554");
        cap.SetCapability("deviceType", "phone");
        cap.SetCapability("device", "Android");
        cap.SetCapability("app", "C:/Users/User/Desktop/Mobile Tests/App APK/com.hyperspheric.go4schools.apk");
        cap.SetCapability("appPackage", "appPackage");
        cap.SetCapability("appActivity", "appActivity");


        _driver = new AndroidDriver<AndroidElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap);
    }
Ross
  • 2,463
  • 5
  • 35
  • 91

3 Answers3

1

As of DesiredCapabilites is obsoleted in latest selenium driver, we can use specific browser option for any browser and for android native app we can use AppiumOptions. Below code should work fine for android native app.

        AppiumOptions cap = new AppiumOptions();

        //set the emulator
        cap.AddAdditionalCapability("platformVersion", "8.1");
        cap.AddAdditionalCapability("platformName", "Android");
        cap.AddAdditionalCapability("deviceName", "Device 01 Oreo_1440x2560");
        cap.AddAdditionalCapability("udid", "emulator-5554");
        cap.AddAdditionalCapability("deviceType", "phone");
        cap.AddAdditionalCapability("device", "Android");
        cap.AddAdditionalCapability("app", "C:/Users/User/Desktop/Mobile Tests/App APK/com.hyperspheric.go4schools.apk");
        cap.AddAdditionalCapability("appPackage", "appPackage");
        cap.AddAdditionalCapability("appActivity", "appActivity");
0

The .NET bindings are moving toward a pattern where DesiredCapabilites should not be used directly. To facilitate that, the ChromeOptions class has a ToCapabilities() method.

EDIT:

This should work fine:

ChromeOptions options = new ChromeOptions()
DesiredCaps = options.ToCapabilities() as DesiredCapabilities;
DesiredCaps.SetCapability("platformName","Android");
DesiredCaps.SetCapability("platformVersion", "8.1");
DesiredCaps.SetCapability("deviceName", "Device 01 Oreo_1440x2560");
DesiredCaps.SetCapability("device", "Android");

AppDriver = new AndroidDriver<AppiumWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), DesiredCaps, TimeSpan.FromSeconds(300));
Pierre Baran
  • 160
  • 10
SteroidKing666
  • 553
  • 5
  • 13
  • I am just getting the error `OpenQA.Selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: You must include a platformName capability` – Ross Aug 07 '18 at 13:57
  • Check my updated answer. Use your capabilities according to your need. I have just shown how I have achieved this. – SteroidKing666 Aug 07 '18 at 14:06
  • Sorry about my lack of understanding but using that code throws errors. `DesiredCaps`, `options`, and `AppDriver` all have errors such as `..does not exist in the current context` – Ross Aug 07 '18 at 14:20
0

As of now, the developpers of Appium ( who provide the AnroidDriver class ) haven't implemented a solution bypassing the use of the DesiredCapabilities class. ( I couldn't find any related issue or pull request )

As refered in this selenium issue

Pierre Baran
  • 160
  • 10