昨天我在工作中遇到了一个问题,同时编写了一个自动UI测试,用于查找我们某个应用中的某个错误。
如上所述,即使传递正确的元素,根据视图树和坐标,下面的代码没有点击右边的元素,它让我疯狂。
gamelist.getChild(new UiSelector().className("android.widget.LinearLayout").instance(0)).click;
代码是单击水平布局中的某个元素,并且由于任何不明原因它总是点击它之前的元素甚至调试测试让我不理解为什么会出现这种情况,因为元素和坐标是正确的已分配并确实匹配我之前使用uiautomatorviewer提取的视图树中的信息。
很高兴,最终我能够解决这个奇怪的问题,因为我无法找到任何有关堆栈溢出的解决方案,我认为分享它并不是一个坏主意。
以下是现在为我工作的代码:
UiObject gameview = gamelist.getChild(new UiSelector().className("android.widget.LinearLayout").instance(0));
Rect rect = gameview.getChild(new UiSelector().className("android.view.View").instance(0)).getBounds();
uiDevice.click(rect.right,rect.centerY());
在最后一行获取rect.centerX()也导致调用错误的元素,原因不明。
我希望这可以帮助一些也在努力解决这个问题的人,如果有人能告诉我为什么会出现这种情况,我会很感激。