如何旋转活动,我的意思是:使用Espresso改变屏幕方向?

我已经决定使用Google的Espresso进行应用程序测试的测试标准之一是:

测试应在屏幕方向旋转后保持活动状态

使用Espresso时如何旋转屏幕?

我尝试了以下Robotium代码(是的,我在我的Espresso测试中放置了Robotium代码,所以起诉我)

solo.setActivityOrientation(solo.LANDSCAPE); solo.setActivityOrientation(solo.PORTRAIT); 

但是当我在Espresso测试中运行它时,它会崩溃应用程序。
有没有办法做到这一点?

在此先感谢您的帮助

  • 如何使用React Native的Espresso UItesting?
  • Android Espresso ListView点击项目
  • Espresso测试错误:AppNotIdleException
  • 在运行测试之前,android espresso登录一次
  • 意式咖啡dynamic旋转器testing
  • 用浓咖啡点击不完全可见的imageButton
  • Espresso Tests无法访问类文件
  • 使用Espresso测试ViewPager。 如何对项目的按钮执行操作?
  • 如果您的测试用例中只有Activity,则可以:

    1.声明你测试Rule

     @Rule public ActivityTestRule mActivityTestRule = new ActivityTestRule<>(TestActivity.class); 

    2.获取Activity并应用屏幕旋转。

     mActivityTestRule.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); mActivityTestRule.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    那是一块馅饼!

    你可以用uiautomator库来做

     dependencies { androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3' } 

    ui automator需要min sdk版本18,所以如果你的app有较低的min sdk你需要在androidTest文件夹中创建一个新的AndroidManifest.xml

     < ?xml version="1.0" encoding="utf-8"?>    

    然后在你的测试中

     UiDevice device = UiDevice.getInstance(getInstrumentation()); device.setOrientationLeft(); device.setOrientationNatural(); device.setOrientationRight(); 

    如何旋转屏幕:

     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); } } 

    Activity可以从ActivityRule获得。

    这个更完整的解决方案可以创建自定义Espresso ViewAction并且运行良好。 它显示了在调用setRequestedOrientation()方法之前如何获取Activity (即使它是AppCompatActivity )。 它还有一个干净的调用者界面:

     onView(isRoot()).perform(orientationLandscape()); onView(isRoot()).perform(orientationPortrait()); 

    我按照100毫秒的延迟跟踪每个方向更改,但您可能不需要它。

    你不能混合Robotium和Espresso测试。 有时解决任何问题的最佳方法是检查所需但不可合并的方法的源代码。

    我很确定你已经有了setUp()方法,其代码如下:

    myActivity = this.getActivity();

    使用此选项可更改屏幕方向更改:

    myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    要么

    myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    您可能还需要使用myActivity.getInstrumentation().waitForIdleSync();Thread.sleep(milliseconds); 为了等待旋转结束,因为它是以异步方式执行的。 第二种方法取决于仿真器/设备,因此明智地选择它。

    希望它有所帮助。