我有我的uiautomator测试用例:
public class clickTest extends UiAutomatorTestCase {
public void myTest() throws UiObjectNotFoundException {
...
//Is it possible to get Context or Activity here?
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,是否有可能获得Context或Activity实例UiAutomatorTestCase?
或如何获得PackageManager的UiAutomatorTestCase?
现在我正在使用uiautomator像这样转储UI:
adb shell uiautomator dump
Run Code Online (Sandbox Code Playgroud)
它工作正常,但执行它需要大约3秒钟.所以我想知道是否有更快的方法呢?就像创建一个转储UI的服务一样,还是需要一段时间?
我想使用 uiautomatorEditorInfo.IME_ACTION_DONE发送EditText:
要测试的代码:
mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//Do something
}
}
Run Code Online (Sandbox Code Playgroud)
这应该通过发送数字键盘键码进行测试 - 但这与正常的键码不同,如下所示:
mDevice.pressKeyCode(KEYCODE_ENTER);
Run Code Online (Sandbox Code Playgroud)
所有要确认的关键事件在这里不起作用。如何实现发送数字键盘确认按键事件的位置EditorInfo.IME_ACTION_DONE?
我已经安装了Android studio V 3.1.1
我正在尝试从以下位置启动 UIautoamtorviewer.bat 文件
C:\Users\panmishr\AppData\Local\Android\Sdk\tools\bin
Run Code Online (Sandbox Code Playgroud)
但它总是给我错误
SWT folder '..\framework\location of your Java installation.' does not exist.Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.
Run Code Online (Sandbox Code Playgroud)
下面是我设置的环境变量列表
ANDROID_HOME: C:\Users\panmishr\AppData\Local\Android\Sdk
ANDROID_SWT:C:\Users\panmishr\AppData\Local\Android\Sdk\tools\lib\x86_64
JAVA_HOME :C:\Program Files\Java\jdk1.8.0_171
Run Code Online (Sandbox Code Playgroud)
在路径变量中,我已经包含
C:\Users\panmishr\App;C:\Users\panmishr\AppData\Local\Android\Sdk\tools
C:\Users\panmishr\AppData\Local\Android\Sdk\platform-tools
Run Code Online (Sandbox Code Playgroud)
我的机器是 64 位 Windows 7 。
让我知道,我错过了什么。
./adb exec-out uiautomator dump /dev/ttyKilled重复返回输出。顺便说一句,有时它确实会返回 xml 文件。对它有什么补救措施?
我在junitTest中使用uiautomator,在“@BeforeClass”我初始化一个UiDevice:“”mUIDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); 首先我完成了一个测试,然后我再次开始测试,我得到一个错误:java.lang.IllegalStateException:UiAutomationService android.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@7478d40alreadyregistered!
@RunWith(AndroidJUnit4.class)
public class DailyInstrumentedTest {
@BeforeClass
public static void beforeTest(){
try {
mUIDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); //??device??
}
}
@Test
public void test(){}
}
Run Code Online (Sandbox Code Playgroud) android accessibility android-uiautomator android-accessibility
我正在使用 Jetpack Compose 和 Appium 以及 UIAutomator。我想为id可组合项设置唯一的值,而不是显示 Xpath,因为:
不建议使用 XPath 定位器,这可能会导致脆弱的测试。请您的开发团队提供独特的辅助功能定位器。
在我的 Composable 下的 Android Studio 中,我添加了:
Row(
modifier = Modifier.semantics { testTagsAsResourceId = true }
...
) {
Text(
modifier = Modifier.semantics { testTag = "testTag" },
Run Code Online (Sandbox Code Playgroud)
现在在 Appium 中我可以看到resource-id= testTag,但id仍然显示 Xpath。
根据这篇文章,我应该能够将其设置为与使用和某些类id相同 ,但我不明白如何 - 我应该在我的可组合项中添加此注释吗?resource-id@AndroidFindByUiSelector
我在这里读到了一个解决方案,但不幸的是,浓缩咖啡不适合我。
我也尝试使用:
modifier = Modifier.semantics { this.contentDescription = "testTag" },
Run Code Online (Sandbox Code Playgroud)
这实际上改变了 Xpath,但仍然显示上面的警告。
这就是我想要的方式(其中 id 和资源 id 具有相同的值):文章中的图片
xpath kotlin android-studio android-uiautomator appium-android
最近我尝试开始使用android uiautomation测试.
来自开发者网站的教程我经历过几次,在遇到一些问题并解决它们之后,我现在遇到了更大的问题.
我创建了一个项目,导入了两个jar文件并构建了一个java测试用例场景(教程中的那个).之后我用shell命令行创建了一个uitest projekt.更新build.xml创建了一个jar文件并将其推送到我的设备上.
至于好的一切在这一点上很好地工作.
但是尝试使用命令行运行我的测试:
adb -s <ANDROID_SERIAL> shell uiautomator runtest DeviceUnlocker.jar -c c.d.d.DeviceUnlocker
Run Code Online (Sandbox Code Playgroud)
我只收到错误:
INSTRUMENTATION_RESULT:shortMsg =了java.lang.RuntimeException
INSTRUMENTATION_RESULT:longMsg =没有对路径发现类"cddDeviceUnlockingPseudoCodeTest:/system/framework/android.test.runner.jar:/system/framework/uiautomator.jar :: /数据/本地/tmp/DeviceUnlocker.jarINSTRUMENTATION_CODE:0
在使用Android UIAutomator进行移动UI自动化测试时,我需要找出列表视图中存在的所有元素。
通过使用如下所示的“ getChildCount()”方法,我仅获得了当前可见元素的计数,但是列表视图中存在更多元素,但这些元素不可见。
这是示例代码:
//Created UI Object for list view
UiObject listview_elements = new UiObject(new UiSelector().className("android.widget.ListView"));
//Printing the numbmer of child ements present in the List View by using getchildCount() method
System.out.println("List view elements : "+listview_elements.getChildCount());*
Run Code Online (Sandbox Code Playgroud)
谁能帮助获得包括不可见元素(即当前未显示在屏幕上)在内的所有列表视图元素的计数。
注意: 请注意,这里我没有实现android UI,而是使用Android的UIAutomator测试第三方android应用程序的UI。
我从可访问性获取
Got null根节点 - 重试...
来自的消息UiAutomator,我不知道为什么.
不久:
我们正在对我们的应用程序执行E2E测试,每个测试都从启动活动开始.第一次测试成功运行.当第二次测试开始时,在我们开始寻找UiObject之前一切正常.在那次通话中,我们收到了错误.
详细:
第一次测试开始StartActivity并通过入门导航到MainScreen.
开始屏幕开始:
val intent = Intent(appContext, StartActivity::class.java)
appContext.startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样:
val intent = appContext.packageManager.getLaunchIntentForPackage(appContext.originalPackageName).apply {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
appContext.startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
但没有区别,因为测试运行器会在测试运行后自动检查是否存在正在运行的活动,并清除它.
当第二次测试运行时,它仍然从启动,StartActivity但现在跳过启动过程,并且用户(测试运行器)被导航到包含Continue按钮的屏幕.因此,我们找到带有文本的UiObject Continue并等待它出现在屏幕上.一旦出现,我们将点击它.但是,一旦我们启动"查找继续按钮",标题中的消息就会开始出现,几秒钟后,所有内容都会崩溃:
测试运行失败:由于"进程崩溃",仪表运行失败.
片段:
val continueButton = viewByText { appContext stringOf R.string.all_continue }
continueButton.waitToBecomeVisible(1.minute)
continueButton.click()
Run Code Online (Sandbox Code Playgroud)
我猜最后的问题是,是什么导致UiAutomator丢失所有根节点?在调试方法UiDevice一样getUiAutomation,getWindowRoots与实际getRootNode()距离QueryContoller,这是记录上述消息,并没有帮助.
语法糖:
appContext
val appContext: Context get() = InstrumentationRegistry.getTargetContext()
Run Code Online (Sandbox Code Playgroud)
viewByText:
fun viewByText(text: () …Run Code Online (Sandbox Code Playgroud)