标签: ui-testing

Android P Preview在API兼容性错误的情况下破坏了UiAutomator测试

我在Pixel设备上尝试Android P预览,目前遇到使用UiAutomator框架编写的仪器测试问题.

每当使用UiAutomator通过以下代码模拟按钮点击时:

onView(withId(R.id.button_activity_login)).perform(click())
Run Code Online (Sandbox Code Playgroud)

我遇到一个带有消息的AlertDialog

Detected problems with API compatibility (visit g.co/dev/appcompat for more info)
Run Code Online (Sandbox Code Playgroud)

这导致了这个链接:

https://developer.android.com/preview/restrictions-non-sdk-interfaces.html#differentiating_between_sdk_and_non-sdk_interfaces

这打破了UiAutomator测试,因为我的测试目前不考虑每个动作之间的额外AlertDialog.

这只发生在UiAutomator的按钮点击,而不是Espresso的.我相信UiAutomator可能会在引擎盖下使用一些反射来实现跨应用程序测试功能(事先不知道UI组件的文本或ID),而Espresso负责处理被测试应用程序内的所有内容.

这有点奇怪,因为UiAutomator是Google自己在开发者网站上建议的测试框架(https://developer.android.com/training/testing/ui-automator.html#ui-automator-apis).有没有人经历过或解决过以下问题?

testing android ui-testing android-uiautomator

9
推荐指数
0
解决办法
908
查看次数

XCode 7中UI测试的文档

我想知道是否有任何关于在WWDC 2015中引入的XCode 7中的新UI测试的文档.如果没有文档,是否有任何用户生产的版本值得关注?

谢谢

user-interface xcode ui-testing xcode-ui-testing

8
推荐指数
2
解决办法
2751
查看次数

UI测试+ postNotificationName +永远不会到达观察者+ Xcode 7

我有用于测试MyApp的UI测试目标.要测试特定的MyApp条件,我需要将通知从UI测试目标发布到MyApp目标.要从UI测试目标函数发布通知,我使用此:

NSNotificationCenter.defaultCenter().postNotificationName(name, object: nil, userInfo: aUserInfo)
Run Code Online (Sandbox Code Playgroud)

看起来这个通知永远不会从UI测试目标到达观察者,但是从MyApp目标发布此通知时它可以正常工作.

如何从UI Target发布通知到MyApp目标?

使用Xcode 7.

xcode ui-testing ios xcode-ui-testing

8
推荐指数
1
解决办法
783
查看次数

无法在45秒内启动Intent - robotium

我正面临着一个我一直试图解决的大问题.我正在尝试使用robotium运行测试,但是当我调用getActivity()setup方法时,RuntimeException会抛出异常.

java.lang.RuntimeException:无法在45秒内启动意图Intent {act = android.intent.action.MAIN flg = 0x14000000 cmp = com.company.app/.SplashActivity}.也许主线程在合理的时间内没有闲置?可能会有一个动画或不断重新绘制屏幕的东西.或者活动是在创建网络呼叫?请参阅threaddump日志.在您的活动启动请求为1463908619275之前,事件队列最后一次空闲以供您参考,现在队列最后一次空闲时间是:1463908619275.如果这些数字相同,您的活动可能会占用事件队列.

我正在使用机器人5.4.4

android ui-testing robotium

8
推荐指数
0
解决办法
1043
查看次数

如何在ui测试时查看应用程序日志记录

在我的Jenkins CI slave上的iOS应用程序上运行UI测试时,UI不正确,我的测试失败.在本地,相同的UI是预期的,测试通过.

我无法解决这个问题,我无法在远程计算机上进行调试.因此,我想添加日志记录以查看应用程序正在做出哪些决定,以找出UI在远程Jenkins从站中错误显示的原因.

测试日志输出不包含来自应用程序(通过NSLog)的日志输出,也无法NSLog在派生数据输出文件夹中的任何.xcactivitylog文件中找到应用程序调用中的任何字符串.

当UI测试运行时,我在哪里可以找到我的应用程序的日志输出?这是使用运行iOS 9.3模拟设备的Xcode 8.2.

ui-testing xctest xcode-ui-testing

8
推荐指数
1
解决办法
1938
查看次数

如何通过 CLI 擦除 Xcode 10 模拟器克隆?

它们共享相同的 UDID 吗?它们是如何在幕后实施的?

场景是我有 4 个并行运行 UI 测试的克隆。我需要一个干净的模拟器来进行一些测试(但想保持随机测试顺序)

xcode simulator ui-testing parallel-testing ios

8
推荐指数
1
解决办法
1476
查看次数

Android UI使用CI中的存储权限进行测试

我想在CI(Jenkins Pipeline)中的项目上运行UI测试和单元测试.UI测试要求图像和视频位于测试设备/仿真器上.在UI测试中,我请求存储读/写访问权限,因此我可以将一些资源转储到下载文件夹中,然后在测试套件的末尾将其删除.

当我在Jenkins(mac)上运行我的测试时,没有授予权限,没有媒体转移,我的所有测试都失败了.

该项目包含一个应用程序模块和两个内部库模块.

管道步骤

建立

sh "./gradlew clean assembleRelease"
Run Code Online (Sandbox Code Playgroud)

单元测试

sh "./gradlew testReleaseUnitTest"
Run Code Online (Sandbox Code Playgroud)

UI测试

sh "$ANDROID_HOME/emulator/emulator @my_sweet_emulator_name -no-boot-anim & $ANDROID_HOME/platform-tools/adb wait-for-device"
sh './gradlew connectedAndroidTest'
Run Code Online (Sandbox Code Playgroud)

问题

1)CI构建依赖于隐式assembleDebugAndroidTest任务

2)如果我在计算机的命令行上运行该任务,则测试将安装但是未授予读/写存储权限,因此所有测试都因设备上没有任何预期内容而失败.

我试过的事情

  • 我曾尝试仅测试发布版本,但这显示了相同的问题2. testBuildType "release"
  • 我没有其他权限需要处理

我如何授予权限

@RunWith(AndroidJUnit4::class)
class MyMediaClassTest {

    @Rule
    @JvmField
    val activityRule = ActivityTestRule(MainActivity::class.java)

    @Rule
    @JvmField
    val grantPermissionRule: GrantPermissionRule = GrantPermissionRule
            .grant(android.Manifest.permission.READ_EXTERNAL_STORAGE,
                    android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
// tests and stuff
}
Run Code Online (Sandbox Code Playgroud)

我已经看到了一个短期解决方案,可以将我的所有媒体资产手动复制到模拟器中.但这似乎不对,这应该能够实现自动化.

android ui-testing jenkins-pipeline

8
推荐指数
1
解决办法
284
查看次数

使用 FragmentScenario 测试片段时如何测试与菜单的交互

我正在尝试使用 FragmentScenario 测试片段。这个片段有自己的菜单。操作栏上有一个添加图标,单击此菜单项会启动一个子片段,用户可以从中添加新项目。所以我试图测试这种行为。但是,您可能知道,FragmentScenario 在 EmptyFragmentActivity 中启动片段,而不启动真正的宿主活动。由于操作栏不是片段布局的一部分,而是属于宿主活动,因此在测试期间操作栏和菜单甚至不可见。那么如何测试与菜单的交互呢?

我从官方文档中找到了这条信息:

如果您需要调用片段本身的方法,例如响应选项菜单中的选择,您可以通过实现 FragmentAction 安全地执行此操作:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<MyFragment>()
        scenario.onFragment(fragment ->
            fragment.onOptionsItemSelected(clickedItem) {
                //Update fragment's state based on selected item.
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如何将正确的项目传递给 onOptionsItemSelected 回调?我试图将 addMenuItem 定义为成员变量并在 onCreateOptionsMenu 内部对其进行初始化,但它返回 null。在测试期间似乎没有调用 onCreateOptionsMenu。所以我不知道如何测试用户与菜单的交互。

android menu ui-testing fragment android-fragmentscenario

8
推荐指数
1
解决办法
440
查看次数

测试按钮单击 ReactJS 时是否呈现另一个组件

我在两个不同的文件中有两个独立的组件

组件A组件B

我在ComponentB中有一个按钮

现在我想测试一下,当单击ComponentB中的特定按钮时, ComponentA应呈现如下:

import { render, screen, fireEvent } from '@testing-library/react';
import ComponentA from './ComponentA';
import ComponentB from './ComponentB'

test('Component A Comes up on Click of Component B button', () => {
  render(<ComponentB />);

  const componentBButton = screen.getByRole('button');
  
  fireEvent.click(componentBButton);
  
  expect(<ComponentA />).toBeInTheDocument(); //This throwing an error that receiver must be HTMLElement or SVGElement

});
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到了Receiver must be HTMLElement or SVGElement这个expect(<ComponentA />).toBeInTheDocument();错误

请问,我是测试新手,请问如何解决这个问题?谢谢您的意见

ui-testing reactjs react-testing-library

8
推荐指数
1
解决办法
5523
查看次数

Jetpack Compose UI 测试按钮 onClick

我正在尝试测试 ButtonClick 如何更改用户界面。

测试设置如下:

composeRule.setContent {
    var i by remember { mutableStateOf(0) }
    Button(modifier = Modifier.testTag("TEST"), onClick = { i++ }) {
        Text(text = i.toString())
    }
}
Run Code Online (Sandbox Code Playgroud)

我的实际测试如下:

val button = composeRule.onNodeWithTag("TEST")

button.assertTextEquals("0")
button.performClick()
button.printToLog("Test")
button.assertTextEquals("1")
Run Code Online (Sandbox Code Playgroud)

第一个断言通过,但是在检查文本是否应该等于时失败1

java.lang.AssertionError: Failed to assert the following: (Text + EditableText = [1])
Semantics of the node:
Node #2 at (l=0.0, t=66.0, r=176.0, b=165.0)px, Tag: 'TEST'
Role = 'Button'
Text = '[0]'
Actions = [OnClick, GetTextLayoutResult]
MergeDescendants = 'true'
Selector used: (TestTag = …
Run Code Online (Sandbox Code Playgroud)

android ui-testing kotlin android-jetpack-compose

8
推荐指数
1
解决办法
4863
查看次数