Run the sample native app C# test
Step 1: Setup environment
Requirements
- .NET 9.0
- NUnit framework
- Appium client
- Access key
- You can generate an Access key using the following instruction – Access key
- Billing unit
- The billing unit is your team’s unique identifier, or just the word “personal” in the case of an individual account.
More information can be found here.
- The billing unit is your team’s unique identifier, or just the word “personal” in the case of an individual account.
Step 2: Upload and install an App
Before running tests, several preparations are required:
- Upload the app (only once).
- Find and take a Device
- Install the App
All of these actions can be performed automatically via API.
For more details, please refer to the Upload and Install document.
Step 3: Run sample test
After setup up the environment and installing the native App, you can run your first test
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Android;
using OpenQA.Selenium.Support.UI;
using System;
namespace AppiumTests
{
public class AndroidNativeTest
{
// Constants
const string ProjectName = "<TEAM_CODE>";
const string AccessKey = "mobitru_ak_......";
const string AppiumHost = "app.mobitru.com";
const string DeviceUdid = "38210DLJH0023E";
const string AppPackage = "com.epam.mobitru";
const string AppActivity = ".MainActivity";
const int DefaultImplicitTimeoutSec = 3;
const int DefaultWaitTimeoutSec = 10;
const string AppUserName = "testuser@mobitru.com";
const string AppUserPassword = "password1";
private AndroidDriver driver;
[SetUp]
public void Setup()
{
var appiumOptions = new AppiumOptions();
appiumOptions.AutomationName = "UIAutomator2";
appiumOptions.AddAdditionalAppiumOption("udid", DeviceUdid);
appiumOptions.AddAdditionalAppiumOption("appPackage", AppPackage);
appiumOptions.AddAdditionalAppiumOption("appActivity", AppActivity);
appiumOptions.AddAdditionalAppiumOption("noReset", true);
var appiumHubUrl = $"""https://{ProjectName}:{AccessKey}@{AppiumHost}/wd/hub""";
driver = new AndroidDriver(new Uri($"{appiumHubUrl}"), appiumOptions);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(DefaultImplicitTimeoutSec);
}
[Test]
public void TestAppiumDemo()
{
// enter details
driver.FindElement(By.XPath("//*[@resource-id='com.epam.mobitru:id/login_email']//android.widget.EditText"))
.SendKeys(AppUserName);
driver.FindElement(By.XPath("//*[@resource-id='com.epam.mobitru:id/login_password']//android.widget.EditText"))
.SendKeys(AppUserPassword);
// submit login screen
driver.FindElement(By.XPath("//*[@resource-id='com.epam.mobitru:id/login_signin']")).Click();
// wait for next screen
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(DefaultWaitTimeoutSec));
By categoryElement = By.XPath("//*[@resource-id='com.epam.mobitru:id/category']");
wait.Until(d => d.FindElement(categoryElement).Displayed);
}
[TearDown]
public void TearDown()
{
driver?.Quit();
}
}
}
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.iOS;
using OpenQA.Selenium.Support.UI;
using System;
namespace AppiumTests
{
public class IOsNativeTest
{
// Constants
const string ProjectName = "<TEAM_CODE>";
const string AccessKey = "mobitru_ak_......";
const string AppiumHost = "app.mobitru.com";
const string DeviceUdid = "00008101-001608482602001E";
const string AppBundleId = "com.epam.mobitru.demoapp";
const int DefaultImplicitTimeoutSec = 3;
const int DefaultWaitTimeoutSec = 10;
const string AppUserName = "testuser@mobitru.com";
const string AppUserPassword = "password1";
private IOSDriver driver;
[SetUp]
public void Setup()
{
var appiumOptions = new AppiumOptions();
appiumOptions.AutomationName = "XCUITest";
appiumOptions.AddAdditionalAppiumOption("udid", DeviceUdid);
appiumOptions.AddAdditionalAppiumOption("bundleId", AppBundleId);
var appiumHubUrl = $"""https://{ProjectName}:{AccessKey}@{AppiumHost}/wd/hub""";
driver = new IOSDriver(new Uri($"{appiumHubUrl}"), appiumOptions);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(DefaultImplicitTimeoutSec);
}
[Test]
public void TestAppiumDemo()
{
// enter details
driver.FindElement(By.XPath("//XCUIElementTypeTextField[starts-with(@name,'Login')]"))
.SendKeys(AppUserName);
driver.FindElement(By.XPath("//XCUIElementTypeSecureTextField[starts-with(@name,'Password')]"))
.SendKeys(AppUserPassword);
// submit login screen
driver.FindElement(By.XPath("//XCUIElementTypeButton[starts-with(@name,'Sign in')]")).Click();
// wait for next screen
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(DefaultWaitTimeoutSec));
By productHeaderElement = By.XPath("//*[starts-with(@name,'productHeaderViewLabel')]");
wait.Until(d => d.FindElement(productHeaderElement).Displayed);
}
[TearDown]
public void TearDown()
{
driver?.Quit();
}
}
}