Android 如何旋转活动,我的意思是:使用浓缩咖啡改变屏幕方向?
我已经决定,我使用谷歌浓缩咖啡进行应用程序测试的测试标准之一是:Android 如何旋转活动,我的意思是:使用浓缩咖啡改变屏幕方向?,android,robotium,ui-testing,android-espresso,Android,Robotium,Ui Testing,Android Espresso,我已经决定,我使用谷歌浓缩咖啡进行应用程序测试的测试标准之一是: 屏幕方向旋转后,测试应保持活动状态 使用浓缩咖啡时如何旋转屏幕 我尝试过以下机器人代码(是的,我在浓缩咖啡测试中加入了机器人代码,所以起诉我) 但当我在浓缩咖啡测试中运行应用程序时,它会崩溃。 有什么方法可以做到这一点吗? 提前感谢您的帮助您不能混合使用Robotium和Espresso测试。有时解决任何问题的最佳方法是检查所需但不兼容方法的源代码 我很确定您已经有了setUp()方法,它的代码如下: myActivity=thi
屏幕方向旋转后,测试应保持活动状态
使用浓缩咖啡时如何旋转屏幕
我尝试过以下机器人代码(是的,我在浓缩咖啡测试中加入了机器人代码,所以起诉我) 但当我在浓缩咖啡测试中运行应用程序时,它会崩溃。
有什么方法可以做到这一点吗?
提前感谢您的帮助您不能混合使用Robotium和Espresso测试。有时解决任何问题的最佳方法是检查所需但不兼容方法的源代码 我很确定您已经有了
setUp()
方法,它的代码如下:
myActivity=this.getActivity()代码>
使用此选项更改屏幕方向更改:
myActivity.setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u横向)代码>
或
myActivity.setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Graphic)代码>
您可能还需要使用myActivity.getInstrumentation().waitForIdleSync()代码>或线程睡眠(毫秒)代码>以等待旋转结束,因为它是以异步方式执行的。第二种方法取决于模拟器/设备,所以要明智地选择它
希望有帮助。如何旋转屏幕:
public static void rotateScreen(Activity activity) {
final CountDownLatch countDownLatch = new CountDownLatch(1);
final int orientation = InstrumentationRegistry.getTargetContext()
.getResources()
.getConfiguration()
.orientation;
final int newOrientation = (orientation == Configuration.ORIENTATION_PORTRAIT) ?
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE :
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
activity.setRequestedOrientation(newOrientation);
getInstrumentation().waitForIdle(new Runnable() {
@Override
public void run() {
countDownLatch.countDown();
}
});
try {
countDownLatch.await();
} catch (InterruptedException e) {
throw new RuntimeException("Screen rotation failed", e);
}
}
活动
可从中获取 您可以使用uiautomator库执行此操作
dependencies {
androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
}
ui自动机需要min sdk版本18,因此如果您的应用程序的min sdk较低,则需要在androidTest
文件夹中创建一个新的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:tools="http://schemas.android.com/tools"
package="your.package.name">
<uses-sdk tools:overrideLibrary="android.support.test.uiautomator.v18"/>
</manifest>
如果测试用例中只有一个活动,则可以执行以下操作:
1.声明您测试规则
。
那是一块馅饼 这创建了一个定制的浓缩咖啡ViewAction
,效果很好。它显示了如何在调用setRequestedOrientation()
方法之前获取活动(即使它是AppCompatActivity
)。它还有一个干净的调用方界面:
onView(isRoot()).perform(orientationLandscape());
onView(isRoot()).perform(orientationPortrait());
虽然您可能不需要,但我会以100毫秒的延迟跟踪每个方向的更改。在我自己的方向测试问题之后,我想补充一点,虽然lelloman关于使用UiDevice
的建议从文档的角度来看是正确的,但不幸的是,在某些情况下它并没有按照预期工作
我发现至少在API 23模拟器上,在测试崩溃后,旋转可能会卡住:
DouiDevice.setOrientationLeft()
应用程序崩溃李>
旋转受阻
3.1通过ui设备强制旋转
工作,但当测试结束时,旋转返回错误位置,直到您手动将旋转更改为“自动旋转”
3.2ui设备。unfreezzerotation()
在测试运行时,但在测试结束旋转回到错误位置后,会有帮助
我在API 28上没有这个问题
因此,我发现使用setRequestedOrientation
是我唯一的解决方案。看看这里公认的答案:这只是解决方案的一部分。之后您似乎需要等待一段时间。很抱歉,但它似乎可以工作:您可以使用getInstrumentation().waitForIdleSync()
而不是CountDownLatch
。这是在测试时处理方向的最佳方法。如果设备禁用了自动旋转,则此方法不起作用。有办法吗?柯克,你确定吗?如果我没记错的话,它应该work@Kirk我刚刚在运行Android 9的手机上测试了这个功能,即使禁用了auto rotationWith AndroidX,它也会旋转,Gradle依赖性现在已经消失了
UiDevice device = UiDevice.getInstance(getInstrumentation());
device.setOrientationLeft();
device.setOrientationNatural();
device.setOrientationRight();
@Rule
public ActivityTestRule<TestActivity> mActivityTestRule = new ActivityTestRule<>(TestActivity.class);
mActivityTestRule.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
mActivityTestRule.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
onView(isRoot()).perform(orientationLandscape());
onView(isRoot()).perform(orientationPortrait());