我已经决定,我的应用程序测试与谷歌的Espresso的测试标准之一是:
屏幕方向旋转后,测试应保持活动状态
使用Espresso咖啡时如何旋转屏幕?
我已经尝试了以下Robotium代码(是的,我把Robotium代码在我的咖啡测试,所以起诉我)
solo.setActivityOrientation(solo.LANDSCAPE);
solo.setActivityOrientation(solo.PORTRAIT);
但是当我在Espresso测试中运行它时,它会使应用程序崩溃。
有什么办法可以做到吗?
- 提前感谢您的帮助**
7条答案
按热度按时间8nuwlpux1#
如果测试用例中只有“活动”,则可以执行以下操作:
1.宣告你测试
Rule
。2.获取
Activity
并应用屏幕旋转。那是一块馅饼!
z6psavjg2#
您可以使用uiautomator库来完成此操作
用户界面自动化需要最小软件开发包版本18,因此如果您的应用具有较低的最小软件开发包,则需要在
androidTest
文件夹中创建新的AndroidManifest.xml
然后在你的测试中
nfs0ujit3#
这个more complete solution创建了一个定制的Espresso
ViewAction
,并且运行良好。它展示了如何在调用setRequestedOrientation()
方法之前获取Activity
(即使它是AppCompatActivity
)。它还有一个干净的调用者接口:我会在每次方向改变后延迟100毫秒,尽管您可能不需要它。
falq053o4#
如何旋转屏幕:
Activity
可以从ActivityRule获得。jhiyze9q5#
你不能混合Robotium和Espresso测试。有时候解决任何问题的最好方法是检查所需但不兼容的方法的源代码。
我非常确定您已经有了
setUp()
方法,其代码如下:myActivity = this.getActivity();
使用此选项更改屏幕方向更改:
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
或
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
您可能还需要使用
myActivity.getInstrumentation().waitForIdleSync();
或Thread.sleep(milliseconds);
来等待旋转结束,因为它是以异步方式执行的。第二种方法取决于模拟器/设备,因此请明智地选择它。希望能有所帮助。
jjhzyzn06#
在我自己测试了这个方向之后,我想补充一点,虽然从文档的Angular 来看,lelloman使用
UiDevice
的建议是正确的,但不幸的是,在某些情况下,它并没有像预期的那样工作。我发现,至少在API 23模拟器上,测试崩溃后旋转可能会卡住:
1.执行
uiDevice.setOrientationLeft()
1.应用程序崩溃;
1.旋转卡死;
3.1通过
UiDevice
强制旋转可以工作,但当测试结束时,旋转返回错误的旋转,直到您手动将旋转更改为“自动旋转”;3.2
uiDevice.unfreezeRotation()
在测试运行时有帮助,但在测试结束旋转回到错误位置后。我在API 28上没有这个问题。
所以我发现使用
setRequestedOrientation
是我唯一的解决方案。u0sqgete7#
此外,如果您使用ActivityTestRule来访问您的Activity,documentation会声明此类已弃用,您最好使用ActivityScenarioRule。
您需要将与Activity的交互放在一个可运行的回调中,而不是直接访问Activity的属性。
因此,屏幕旋转示例可能如下所示:
不确定要使用的常量是否合适,但
ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE
(或USER_PORTRAIT
)是对我有效的常量