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

4

我正在使用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个回答

3

Appium无法终止模拟器实例。但您可以使用adb来关闭它们。将类似以下内容的代码整合到您的拆卸代码中。

string cmdstr;
cmdstr="adb -s emulator-5554 emu kill"
System.Diagnostics.Process.Start("CMD.exe",cmdstr);

非常感谢你 - Ross

1
对于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)关闭当前正在运行的模拟器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接