摘要: ● 等待操作
public boolean isViewGone(int id, long timeout) { final long endtime = SystemClock.uptimeMillis() + timeout; while(SystemClock.uptimeMillis() endtime) { if(solo.getView(id).hasFo ...
● 等待操作
|
public boolean isViewGone(int id, long timeout)
{
final long endtime = SystemClock.uptimeMillis() + timeout;
while(SystemClock.uptimeMillis() < endtime)
{
if(solo.getView(id).hasFocusable())
{
solo.sleep(10);
}
else
{
return true;
}
}
return false;
}
● 获取页面图片
public Bitmap getSourceIcon()
{
BitmapDrawable drawable = (BitmapDrawable) sourceImageView.getDrawable();
return drawable.getBitmap();
}
这里的sourceImageView变量,就是一个ImageView的实例。
为了方便,我们在项目中使用了Robotium框架,但是如果追本溯源的话,我们不禁要问:
这些操作是如何实现的?我们自己能不能写?
我们知道Robotium框架是基于Instrumentation,并且市面上大多数的Android测试框架都是基于Instrumentation的,而Instrumentation就是我们做自动化的基石,一层层的跟进Robotium的Click方法,我们会看到最终它是调用Instrumentation的:
public void sendPointerSync (MotionEvent event)
来实现Click操作。
For Example:Solo.clickOnView(View view) 会调用 clicker.clickOnScreen(view) 跟进去我们会看到下面的代码:
public void clickOnScreen(float x, float y) {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, x, y, 0);
MotionEvent event2 = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_UP, x, y, 0);
try{
inst.sendPointerSync(event);
inst.sendPointerSync(event2);
sleeper.sleep(MINISLEEP);
}catch(SecurityException e){
Assert.assertTrue("Click can not be completed!", false);
}
}
这样我们就明白了,原来在Android automation testing,Click的操作是这么实现的!
总结
要是我们自己来写Android自动化测试框架,我们也可以提供这样一个方法嘛~
相关链接:
Android自动化追本溯源系列(1):获取页面元素