Hug*_*ins 7 java android automated-tests android-virtual-device android-uiautomator
我使用以下脚本在Android中的计算器中使用UiAutomator键入"33".但是,只接受第一个'3',第二个按下完全被忽略.
import com.android.uiautomator.core.*;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
public class MyFirstUiAutomatorTest extends UiAutomatorTestCase {
UiObject getByDescription(String description) {
return new UiObject(new UiSelector().description(description));
}
UiObject getByText(String description) {
return new UiObject(new UiSelector().text(description));
}
UiObject scrollableGetByText(String text ) throws UiObjectNotFoundException {
UiScrollable uiScrollable = new UiScrollable(new UiSelector().scrollable(true));
uiScrollable.setAsHorizontalList();
return uiScrollable.getChildByText(new UiSelector().className(
android.widget.TextView.class.getName()),
text);
}
public void testStuff() throws UiObjectNotFoundException {
getUiDevice().pressHome();
getByDescription("Apps").clickAndWaitForNewWindow();
getByText("Apps").click();
scrollableGetByText("Calculator").clickAndWaitForNewWindow();
// pressing '+' and '=' effectively clears the previous input
getByText("+").click();
getByText("=").click();
getByText("3").click();
// this second '3' is ignored
getByText("3").click();
}
}
Run Code Online (Sandbox Code Playgroud)
我在第一次点击后尝试添加睡眠2秒,方法是:
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
......但这并没有改变任何事情.
我也尝试在2'3之间点击一个不同的按钮,即:
new UiObject(new UiSelector().text("3")).click();
new UiObject(new UiSelector().className("android.widget.EditText")).click();
new UiObject(new UiSelector().text("3")).click();
Run Code Online (Sandbox Code Playgroud)
......但那也没有用.
想法?
(注意:在AVD中使用Android 4.1.2;在Ubuntu linux 12.04上运行)
按照Rami的观察编辑,我尝试了以下操作,为同一描述的第二个请求重用相同的UiObject对象:
HashMap<String,UiObject> objectByText = new HashMap<String,UiObject>();
UiObject getByText(String description) {
if( objectByText.containsKey(description)) {
System.out.println("" + objectByText.get(description) );
return objectByText.get(description);
}
System.out.println("Created new object for [" + description + "]");
UiObject object = new UiObject(new UiSelector().text(description));
objectByText.put(description, object );
System.out.println("" + object );
return object;
}
Run Code Online (Sandbox Code Playgroud)
...但是它没有用,即使它每次都明显重复使用相同的UiObject,因为它只会说"为[3]创建一个新对象".
然后我尝试了UiDevice.click()'技巧',再次按照Rami的观察创建一个函数'click',如下:
void click(UiObject target ) throws UiObjectNotFoundException {
Rect rect = target.getBounds();
System.out.println("rect: " + rect );
getUiDevice().click(rect.centerX(), rect.centerY());
}
Run Code Online (Sandbox Code Playgroud)
但是,这对我来说也不起作用:只有第一个'3'出现,第二个被忽略,即使两个点击明显在同一个地方,因为rect:输出位置是相同的.如果我手动点击"3",使用我自己的桌面鼠标,则两个3都显示正常.
我也尝试Thread.sleep()在点击之间添加两秒钟,但仍然只有一个'3'出现在我面前.
我有同样的问题,看起来它正在寻找另一个具有相同文本的 UI 元素。我正在尝试自动创建警报,但时间是例如下午 4:45。Uiautomator 将单击右侧按钮。
clickByText("4");
clickByText("4");
clickByText("5");
clickByText("PM");
clickByText("OK");
private void clickByText(String text) throws UiObjectNotFoundException {
UiObject obj = new UiObject(new UiSelector().text(text));
obj.click();
}
Run Code Online (Sandbox Code Playgroud)
这是第一个“4”点击的日志:
07-04 16:54:05.259:I / QueryController(25605):匹配的选择器: UiSelector [TEXT = 4] <<==>> [android.view.accessibility.AccessibilityNodeInfo@592f1; boundsInParent: 矩形(0, 0 - 202, 129); boundsInScreen: 矩形(56, 508 - 258, 637); 包名:com.android.deskclock;类名:android.widget.Button;文字:4;内容描述:空;可检查:假;检查:假;可聚焦:真实;重点:假;选择:假;可点击:真;长可点击:假;启用:真;密码:假;可滚动:假;[ACTION_FOCUS、ACTION_SELECT、ACTION_CLEAR_SELECTION、ACTION_CLICK、ACTION_ACCESSIBILITY_FOCUS、ACTION_NEXT_AT_MOVMENT_GRANULARITY、ACTION_PREVIOUS_AT_MOVMENT_GRANULARITY]]
这是第二次“4”点击的日志:
07-04 16:54:07.798: I/QueryController(25605): 匹配的选择器: UiSelector[TEXT=4] <<==>> [android.view.accessibility.AccessibilityNodeInfo@5bffd; boundsInParent: 矩形(0, 0 - 66, 90); boundsInScreen: 矩形(191, 264 - 257, 354) ; 包名:com.android.deskclock;类名: android.widget.TextView;文字:4;内容描述:空;可检查:假;检查:假;可聚焦:假;重点:假;选择:假;可点击:假;长可点击:假;启用:真;密码:假;可滚动:假;[ACTION_SELECT、ACTION_CLEAR_SELECTION、ACTION_ACCESSIBILITY_FOCUS、ACTION_NEXT_AT_MOVMENT_GRANULARITY、ACTION_PREVIOUS_AT_MOVMENT_GRANULARITY]]
我们可以看到,第一个点击右侧的 android.widget.Button,第二个点击寻找 android.widget.TextView。
| 归档时间: |
|
| 查看次数: |
5338 次 |
| 最近记录: |