Reputation: 2417
I am using Appium to run automated tests on an android emulator. I cannot seem to close the emulator down after the tests have finished. The research I have done seems to point to _driver.Quit();
closing the emulator but it remains running.
How do I close down the emulator after I have run a test?
Code:
[TestClass]
public class UnitTest
{
AndroidDriver<AndroidElement> _driver;
private static Uri testServerAddress = new Uri("http://127.0.01:4723/wd/hub");
private static TimeSpan INIT_TIMEOUT_SEC = TimeSpan.FromSeconds(180);
[TestInitialize]
public void BeforeAll()
{
DesiredCapabilities cap = new DesiredCapabilities();
cap.SetCapability("avd", "Device_01_Oreo_1440x2560");
cap.SetCapability("deviceName", "Device 01 Oreo_1440x2560");
cap.SetCapability("platformName", "Android");
cap.SetCapability("platformVersion", "8.1.0");
cap.SetCapability("udid", "emulator-5554");
cap.SetCapability("appPackage", "appPackage");
cap.SetCapability("appActivity", "appActivity");
cap.SetCapability("unicodeKeyboard", true);
cap.SetCapability("resetKeyboard", true);
_driver = new AndroidDriver<AndroidElement>(testServerAddress, cap, INIT_TIMEOUT_SEC);
}
[TestMethod]
public void Test_Open_Mobile_App()
{
_driver.FindElement(MobileBy.XPath("//android.widget.EditText[@index='0' and @password='false']")).SendKeys("EmailAddress");
_driver.FindElement(MobileBy.XPath("//android.widget.EditText[@index='0' and @password='true']")).SendKeys("Password");
}
[TestCleanup]
public void AfterAll()
{
_driver.CloseApp();
_driver.Quit();
}
}
Edit:
I have just tried to complete this task by killing the emulator process using the below:
Regex regex = new Regex(@"qemu-system.*");
foreach (Process p in Process.GetProcesses("."))
{
if (regex.Match(p.ProcessName).Success)
{
p.Kill();
}
}
This closes the android emulator down, however it also closes the Appium server down as well and therefore testing sequential devices wouldn't work.
So if there is a why to kill the emulator without killing the Appium server then this would also help my situation.
Upvotes: 4
Views: 2837
Reputation: 323
For Mac users, the code:
System.Diagnostics.Process.Start("CMD.exe",cmdstr);
would not work as the system does not recognize the System.Diagnostics command.
Instead, you can use the following code to kill the currently running emulator on Mac:
cmdstr = "adb -s emulator-5554 emu kill";
try {
Runtime.getRuntime().exec(cmdstr);
} catch (IOException e) {
e.printStackTrace();
}
This would run the command string (cmdstr) in the Terminal and would kill the currently running emulator with the given serial (emulator-5554)
Upvotes: 1
Reputation: 573
Appium does not let you terminate emulator instances. But you can use adb to shut them down. Incorporate something like below into your tear down code.
string cmdstr;
cmdstr="adb -s emulator-5554 emu kill"
System.Diagnostics.Process.Start("CMD.exe",cmdstr);
Upvotes: 3