标签: android-uiautomator

如何在uiautomator测试用例中获取上下文?

我有我的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)

我想知道,是否有可能获得ContextActivity实例UiAutomatorTestCase

或如何获得PackageManagerUiAutomatorTestCase

performance android android-intent android-uiautomator

6
推荐指数
1
解决办法
3264
查看次数

任何更快的转储UI层次结构的方法?

现在我正在使用uiautomator像这样转储UI:

adb shell uiautomator dump
Run Code Online (Sandbox Code Playgroud)

它工作正常,但执行它需要大约3秒钟.所以我想知道是否有更快的方法呢?就像创建一个转储UI的服务一样,还是需要一段时间?

android android-ui android-layout android-uiautomator

6
推荐指数
1
解决办法
6878
查看次数

如何使用 uiautomator 发送 EditorInfo.IME_ACTION_DONE keyevent

我想使用 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 android-testing android-uiautomator

6
推荐指数
0
解决办法
562
查看次数

Uiautomatorviewer 给出错误“SWT 文件夹 '..\lib\Java 安装位置。” 不存在”

我已经安装了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 。

让我知道,我错过了什么。

android android-studio android-uiautomator

6
推荐指数
1
解决办法
1万
查看次数

UI 自动化转储“被杀”

./adb exec-out uiautomator dump /dev/ttyKilled重复返回输出。顺便说一句,有时它确实会返回 xml 文件。对它有什么补救措施?

android adb ui-automation android-uiautomator

6
推荐指数
1
解决办法
826
查看次数

uiautormator 总是 IllegalStateException:accessibilityservice 已经注册

我在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

6
推荐指数
0
解决办法
1088
查看次数

如何在 Jetpack Compose for Appium 和 UIAutomator 中设置 id(Xpath 问题)

我正在使用 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

6
推荐指数
0
解决办法
1773
查看次数

android uiautomator runtest错误没找到类

最近我尝试开始使用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.jar

INSTRUMENTATION_CODE:0

java android jar runtimeexception android-uiautomator

5
推荐指数
1
解决办法
4699
查看次数

Android UIAutomator测试:列表视图中存在的所有元素的计数

在使用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。

android android-uiautomator

5
推荐指数
1
解决办法
7364
查看次数

从辅助功能获得空根节点 - UiAutomator

从可访问性获取 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)

android automated-tests android-uiautomator

5
推荐指数
1
解决办法
691
查看次数