用例操作步骤
1、打开闹钟
2、删除全部闹钟
3、创建一个当前时钟后两分钟的闹钟,将音量调到 1/3
4、等待闹钟响起退出闹钟
初步想法:注册一个 UiWatcher 来实现
如果你的测试机的闹钟是悬浮框是拿不到控件的,监听器也只能做拿的到控件的,可以尝试下拉通知栏,等待闹钟提示。
—— 来自 TesterHome 官方 安卓客户端
#2 楼 @erickyang 的确,uiautomator1 的时候没有对应的 UI xml 就拿不到对象。不知道 uiautomator2 怎样。
#3 楼 @Lihuazhang uiautomator2 虽然更加强大,但是基本的抓取控件和 1 还是一样的,问题依然存在!
—— 来自 TesterHome 官方 安卓客户端
#2 楼 @erickyang 是的,响起的是悬浮窗,无法拿到控件,下拉通知栏这个可行,我在想,可否用 android 的方法来监听闹钟响起事件是否被触发呢
@chenglan 基础不好就学啊,没有捷径。都是拿来主义的话,拿到广播你还是不知道有哪些字段,可以获取到哪些信息。有耐心就一点一点慢慢来,学会基础,学会怎么查官网 DOC。
谢谢,关键是要在很短的时间解决这个问题,暂时先用下拉框吧
package com.alarm.test;
/**
* Created by yakamoz on 16/10/11.
*/
import android.app.Instrumentation;
import android.support.test.InstrumentationRegistry;
import android.support.test.uiautomator.By;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject2;
import android.support.test.uiautomator.UiWatcher;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.regex.Pattern;
public class TestAlarm{
public static Instrumentation instrumentation;
public static UiDevice mDevice;
@Before
public void setUp(){
instrumentation = InstrumentationRegistry.getInstrumentation();
mDevice = UiDevice.getInstance(instrumentation);
mDevice.registerWatcher("alarmWatcher", alarmWatcher);
}
@After
public void tearDown() {
mDevice.removeWatcher("alarmWatcher");}
@Test
public void testAlarm() {
//TODO 打开闹钟
//TODO 判断是否存在闹钟,如果存在,清空闹钟
//TODO 创建一个当前始终后两分钟的闹钟,音量调节可以用mDevice.pressKeyCode(25)实现;
//TODO 你可以等待2分钟,或者做其他操作,不会影响UiWatcher的触发
}
public final UiWatcher alarmWatcher = new UiWatcher() {
public boolean checkForCondition() {
UiObject2 alarmWindows = mDevice.findObject(By.text(Pattern.compile(".*闹钟.*", Pattern.DOTALL)));
if (alarmWindows != null) {
//TODO 根据实际情况关闭闹钟
return true;
} else {
return false;
}
}
};
}
创建一个当前始终后两分钟的闹钟,音量调节可以用 mDevice.pressKeyCode(25) 实现;这个我已经实现了,不过谢谢你的分享,我尝试下后面的。太感谢
#10 楼 @ppliulijun 当闹钟响起时,UiautomatorView 无法识别这个闹钟的悬浮框,二楼方法可行
#13 楼 @Lihuazhang 为何不自己先试试
@chenglan 我们为何要帮你回答问题?
@chenglan 抱歉了。有在分享,在 testerhome 比较少。
虽然 uiautomator 检测不到悬浮闹钟提示控件,但是直接用 mDevice.wait(Until.findObject(By.text("Dismiss")),120000).click(); 还是可以在闹钟响的时候点击到取消的,实测 andorid 6.0 的机器上可用
我是通过下拉框监测字符实现
—— 来自 TesterHome 官方 安卓客户端