waitForCondition()使用Sleeper对象在检查条件之间睡眠线程。 Sleeper类的PAUSE定义为500毫秒。我想降低它,理想情况下不需要下载Robotium源代码,更改它,并重新编译Robotium。
我尝试扩展Solo类并构建我自己的Waiter类,该类将使用具有较低睡眠间隔的自定义Sleeper对象,但是Waiter具有包级访问权限,因此该路由不可用。
除了最后一个关键字,this commit message似乎表明自定义配置应该(或即将到来)但我没有看到任何方法在Solo.Config class中自定义这些常量。
有没有人有任何解决方案?谢谢!
更新: @ vRallev的回答可以通过反射完成工作。我今天做了一个pull request合并到Robotium。在下一个版本中,您将能够使用Config类配置休眠时间。
答案 0 :(得分:5)
即使Waiter
或Sleeper
类是公开的,也无法更改值。原因是waiter
类中的Solo
字段是final,而赋值的构造函数是private。
破解这个问题的唯一方法就是反思。我试过下面的解决方案,它的工作原理。注意两个类的包!
package com.robotium.solo;
import java.lang.reflect.Field;
public class SoloHack {
private final Solo mSolo;
public SoloHack(Solo solo) {
mSolo = solo;
}
public void hack() throws NoSuchFieldException, IllegalAccessException {
Field field = mSolo.waiter.getClass().getDeclaredField("sleeper");
field.setAccessible(true);
// Object value = field.get(mSolo.waiter);
// Class<?> aClass = value.getClass();
field.set(mSolo.waiter, new SleeperHack());
// Object newValue = field.get(mSolo.waiter);
// Class<?> newClass = newValue.getClass();
}
}
和
package com.robotium.solo;
public class SleeperHack extends Sleeper {
@Override
public void sleep() {
sleep(50);
}
}