Created
October 7, 2018 15:46
-
-
Save Orange168/90b263532f1863a1d78318cab0453085 to your computer and use it in GitHub Desktop.
[UIAutomator] UIAutomator #test #android
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright 2015, The Android Open Source Project | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package com.example.android.testing.uiautomator.BasicSample; | |
import android.net.Uri; | |
import java.io.File; | |
import org.junit.Before; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.content.pm.PackageManager; | |
import android.content.pm.ResolveInfo; | |
import androidx.test.InstrumentationRegistry; | |
import androidx.test.filters.SdkSuppress; | |
import androidx.test.runner.AndroidJUnit4; | |
import androidx.test.uiautomator.By; | |
import androidx.test.uiautomator.UiDevice; | |
import androidx.test.uiautomator.UiObject2; | |
import androidx.test.uiautomator.Until; | |
import static org.hamcrest.CoreMatchers.equalTo; | |
import static org.hamcrest.CoreMatchers.is; | |
import static org.hamcrest.CoreMatchers.notNullValue; | |
import static org.junit.Assert.assertThat; | |
/** | |
* Basic sample for unbundled UiAutomator. | |
*/ | |
@RunWith(AndroidJUnit4.class) | |
@SdkSuppress(minSdkVersion = 18) | |
public class ChangeTextBehaviorTest { | |
private static final String BASIC_SAMPLE_PACKAGE | |
= "com.example.android.testing.uiautomator.BasicSample"; | |
private static final int LAUNCH_TIMEOUT = 5000; | |
private static final String STRING_TO_BE_TYPED = "UiAutomator"; | |
private UiDevice mDevice; | |
@Before | |
public void startMainActivityFromHomeScreen() { | |
// 初始化UIDevice (Initialize UiDevice instance) | |
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); | |
// 按Home键 | |
mDevice.pressHome(); | |
// 等待Launcher出现 Wait for launcher | |
final String launcherPackage = getLauncherPackageName(); | |
assertThat(launcherPackage, notNullValue()); | |
mDevice.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), LAUNCH_TIMEOUT); | |
// 启动本地APP Launch the blueprint app | |
Context context = InstrumentationRegistry.getContext(); | |
final Intent intent = context.getPackageManager() | |
.getLaunchIntentForPackage(BASIC_SAMPLE_PACKAGE); | |
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); // Clear out any previous instances | |
context.startActivity(intent); | |
// 等待本地APP出现 Wait for the app to appear | |
mDevice.wait(Until.hasObject(By.pkg(BASIC_SAMPLE_PACKAGE).depth(0)), LAUNCH_TIMEOUT); | |
} | |
@Test | |
public void checkPreconditions() { | |
assertThat(mDevice, notNullValue()); | |
} | |
@Test | |
public void testDialPhone() { | |
Context context = InstrumentationRegistry.getContext(); | |
Intent intent = new Intent(Intent.ACTION_DIAL); | |
Uri data = Uri.parse("tel:" + 18888888); | |
intent.setData(data); | |
context.startActivity(intent); | |
} | |
@Test | |
public void takeScreenshot(){ | |
File file = new File("D:\\workspace\\project\\AndroidStudioProject\\testProje\\android-testing\\ui\\uiautomator\\BasicSample\\my.png"); | |
if (!file.exists()) { | |
System.out.println("==>" + file.mkdir()); | |
} | |
mDevice.takeScreenshot(file); | |
} | |
@Test | |
public void testCallPhone() { | |
Context context = InstrumentationRegistry.getContext(); | |
Intent intent = new Intent(Intent.ACTION_CALL); | |
Uri data = Uri.parse("tel:" + 18888888); | |
intent.setData(data); | |
context.startActivity(intent); | |
} | |
@Test | |
public void testChangeText_sameActivity() { | |
// 找到控件并设置TXT参数 Type text and then press the button. | |
mDevice.findObject(By.res(BASIC_SAMPLE_PACKAGE, "editTextUserInput")) | |
.setText(STRING_TO_BE_TYPED); | |
// 找到控件并点击 | |
mDevice.findObject(By.res(BASIC_SAMPLE_PACKAGE, "changeTextBt")) | |
.click(); | |
//验证控件显示并且值为预期 ( Verify the test is displayed in the Ui) | |
UiObject2 changedText = mDevice | |
.wait(Until.findObject(By.res(BASIC_SAMPLE_PACKAGE, "textToBeChanged")), | |
500 /* wait 500ms */); | |
assertThat(changedText.getText(), is(equalTo(STRING_TO_BE_TYPED))); | |
} | |
@Test | |
public void testChangeText_newActivity() { | |
// Type text and then press the button. | |
mDevice.findObject(By.res(BASIC_SAMPLE_PACKAGE, "editTextUserInput")) | |
.setText(STRING_TO_BE_TYPED); | |
mDevice.findObject(By.res(BASIC_SAMPLE_PACKAGE, "activityChangeTextBtn")) | |
.click(); | |
// Verify the test is displayed in the Ui | |
UiObject2 changedText = mDevice | |
.wait(Until.findObject(By.res(BASIC_SAMPLE_PACKAGE, "show_text_view")), | |
500 /* wait 500ms */); | |
assertThat(changedText.getText(), is(equalTo(STRING_TO_BE_TYPED))); | |
} | |
/** | |
* Uses package manager to find the package name of the device launcher. Usually this package | |
* is "com.android.launcher" but can be different at times. This is a generic solution which | |
* works on all platforms.` | |
*/ | |
private String getLauncherPackageName() { | |
// Create launcher Intent | |
final Intent intent = new Intent(Intent.ACTION_MAIN); | |
intent.addCategory(Intent.CATEGORY_HOME); | |
// Use PackageManager to get the launcher package name | |
PackageManager pm = InstrumentationRegistry.getContext().getPackageManager(); | |
ResolveInfo resolveInfo = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); | |
return resolveInfo.activityInfo.packageName; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment