Android UIAutomator / espresso:在特定网址上打开浏览器

时间:2018-01-23 16:53:14

标签: android android-intent android-espresso uiautomator start-activity

我正在玩UIAutomator / espresso和我的应用程序。其实我想做以下事情:

  1. 对我的申请采取行动/检查

  2. 将默认浏览器打开为网址

  3. 返回我的应用程序并重新检查界面

  4. 实际上我无法完成第2步。 以下是我尝试的不同方式:

    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://stackoverflow.com/"));
    
    mActivityTestRule.launchActivity(browserIntent);
    InstrumentationRegistry.getTargetContext().sendBroadcast(browserIntent);
    InstrumentationRegistry.getInstrumentation().startActivitySync(browserIntent);
    

    我在Stack Overflow上搜索但尚未找到解决方案。

    @LargeTest
    @RunWith(AndroidJUnit4.class)
    @FixMethodOrder(MethodSorters.NAME_ASCENDING)
    public class BackgroundForegroundTest {
    
        @Rule
        public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
    
        private UiDevice mDevice;
    
        @Before
        public void before() {
            // Initialize UiDevice instance
            mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
    
            assertThat(mDevice, notNullValue());
        }
    
        @Test
        public void testOpenBrowserAndSwitchBack() throws InterruptedException {
            onView(withId(R.id.text1)).check(matches(isDisplayed()));
    
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://stackoverflow.com/"));
            mActivityTestRule.launchActivity(browserIntent);
            Thread.sleep(8000);
    
            getBackToApp("My App");
    
            onView(withId(R.id.text1)).check(matches(isDisplayed()));
        }
    
        private void getBackToApp(String appDescription){
            try {
                mDevice.pressRecentApps();
                UiSelector selector = new UiSelector();
                UiObject recentApp = mDevice.findObject(selector.descriptionContains(appDescription));
                recentApp.click();
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (UiObjectNotFoundException e) {
                e.printStackTrace();
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

好的家伙我明白了。这是解决方案:

Context context = InstrumentationRegistry.getInstrumentation().getContext();
Intent intent = context.getPackageManager().getLaunchIntentForPackage("com.android.chrome");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.setData(Uri.parse("https://stackoverflow.com/"));
context.startActivity(intent);
mDevice.wait(Until.hasObject(By.pkg("com.android.chrome").depth(0)), TIMEOUT);