运行测试后如何关闭Android SDK模拟器

时间:2018-08-08 08:45:51

标签: c# android selenium appium

我正在使用Appium在android模拟器上运行自动化测试。测试完成后,我似乎无法关闭模拟器。我所做的研究似乎指向_driver.Quit();关闭仿真器,但它仍在运行。

运行测试后,如何关闭模拟器?

代码:

[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();
    }
}

编辑:

我刚刚尝试通过使用以下命令终止仿真器进程来完成此任务:

Regex regex = new Regex(@"qemu-system.*");
foreach (Process p in Process.GetProcesses("."))
{
    if (regex.Match(p.ProcessName).Success)
    {
        p.Kill();
    }
}

这会关闭android模拟器,但是也会关闭Appium服务器,因此无法测试顺序设备。

因此,如果有一个在不杀死Appium服务器的情况下杀死模拟器的原因,那么这也将有助于解决我的问题。

2 个答案:

答案 0 :(得分:1)

Appium不允许您终止仿真器实例。但是您可以使用adb将其关闭。将类似以下内容的代码整合到您的拆卸代码中。

OPP

答案 1 :(得分:0)

对于Mac用户,代码:

System.Diagnostics.Process.Start("CMD.exe",cmdstr);

将不起作用,因为系统无法识别System.Diagnostics命令。

相反,您可以使用以下代码杀死Mac上当前正在运行的仿真器:

        cmdstr = "adb -s emulator-5554 emu kill";
        try {
            Runtime.getRuntime().exec(cmdstr);
        } catch (IOException e) {
            e.printStackTrace();
        }

这将在终端中运行命令字符串(cmdstr),并杀死具有给定序列号(emulator-5554)的当前正在运行的仿真器