我正在尝试Text在我的组件上测试我可以用不同的颜色打印它,所以在我的测试中我正在验证它是否获得了预期的颜色。我正在寻找一种返回颜色的方法,但没有找到。
从现在开始,我断言文本是正确的,可见性是正确的,但是当试图找到获取颜色的方法时,我变得太深了,我正在寻找一个更简单的解决方案。
composeTestRule.onNode(hasTestTag("testTagForButton"), true)
.assertExists()
.assertTextEquals("Testing")
Run Code Online (Sandbox Code Playgroud)
我已经检查过我可以做一些类似.fetchSemanticsNode().layoutInfo.getModifierInfo()进入的事情Modifier,也许从那里我可以得到颜色,但它可能太多了。我还发现.captureToImage()也许我可以在上面得到颜色,但由于我必须放置像素,所以我认为这不是方法。
有什么简单的方法可以得到它吗?
android kotlin android-jetpack android-jetpack-compose android-jetpack-compose-testing
由于广泛的Android 文档,我现在对 Jetpack Compose 中的 UI 测试有些熟悉,但我无法让 Android Studio 运行具有覆盖范围的 Compose 测试。我们目前使用 Jacoco 作为覆盖率工具来生成报告,但根据此Github 问题, Compose 的覆盖率看起来并不是团队的优先事项(遗憾的是:S)。
由于我们不想在评估代码覆盖率时将 UI 测试放在一边,因此有什么方法可以使用 Android Studio 或外部工具/库在 Android Studio 中启用代码覆盖率以进行 Compose 测试?
为了测试撰写布局,我们有一个默认库。
要运行Firebase 测试实验室(FTL),它表示您需要Espresso或UI Automator框架。
但我不确定这是否已经过时。
将我的 APK (使用 jetpack compose 和 compose 测试框架)放在 FTL 上进行测试适用于真实设备,但不适用于虚拟设备。
我的问题是,预期的方法是什么?
谢谢!
android firebase firebase-test-lab android-jetpack-compose android-jetpack-compose-testing
开始录音
打开应用程序
单击对象(按钮等...)
完成录音
获取生成的 kotlin 代码,就像 Espresso 录音一样
但在这个项目中我仍然没有完全迁移到 JetpackCompose。但它会将其识别为 Jetpack Compose 项目
android kotlin android-espresso-recorder android-jetpack-compose android-jetpack-compose-testing
在jetpack compose测试(在真实设备上运行)中触发后退按钮按下的推荐方法是什么?
我想:
@get:Rule()
val composeTestRule = createAndroidComposeRule(MyActivity::class.java)
@Test
fun test() {
// Here would be some setup code, assertions and navigating into a second screen
// Navigate back to previous screen
composeTestRule.onRoot().performKeyPress(KeyEvent(NativeKeyEvent(0, KeyEvent.KEYCODE_BACK)))
// continue...
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
java.lang.IllegalStateException: KeyEvent can't be processed because this key input node is not active.
Run Code Online (Sandbox Code Playgroud)
我没有任何特殊的按键/导航逻辑,仅使用导航撰写库的开箱即用功能。
我遵循新的谷歌指南并以此结束以表示视图模型中的状态,就像 tis
var uiState: AccountSettingUiState by
mutableStateOf(AccountSettingUiState.Initial)
private set
Run Code Online (Sandbox Code Playgroud)
然后我有这个功能
fun resetPasswordUseCase(context: Context) {
resetPasswordUseCase.execute(context)
.subscribeOn(rxSchedulers.io)
.doOnSubscribe {
uiState = AccountSettingUiState.Loading
}
.observeOn(rxSchedulers.ui)
.subscribe {
uiState = AccountSettingUiState.Result
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过断言发出加载然后结果来测试这个函数,但是我如何捕获这些值
android kotlin android-jetpack-compose android-jetpack-compose-testing
我正在使用 Jetpack Compose 测试库实现一些仪器测试。我对 Kotlin / Android 开发还不太熟悉,但我有多年使用 Selenium 和其他测试库的经验,所以我缺少一些基本的东西,并且不知道如何实现它们。
我想做的事:
在 Selenium 上我可以轻松做到这一点:
elements = driver.find_elements("item")
elements.each do |element|
element.click
end
Run Code Online (Sandbox Code Playgroud)
但在具有组合测试框架的 Kotlin 上,我不知道如何做到这一点。下面的方法(负责返回节点列表)不支持forEach:
composeTestRule.onAllNodes(hasTestTag("item")
Run Code Online (Sandbox Code Playgroud)
在 Selenium 上,以下方法返回找到的项目数量:
driver.find_elements("item").size
Run Code Online (Sandbox Code Playgroud)
但是,再一次,没有什么可以与写作相提并论:
composeTestRule.onAllNodes(hasTestTag("item")
Run Code Online (Sandbox Code Playgroud)
我已经阅读了官方的JetPack Compose 测试教程,但它没有提供太多细节
automated-tests gui-testing kotlin instrumented-test android-jetpack-compose-testing
我正在关注Jetpack Compose Codelab 中的测试,但无法使用节点上的函数打印语义树。printToLog我在包内使用此代码androidTest。
import androidx.compose.ui.test.printToLog
...
//testing function
@Test
fun rallyTopAppBarTest() {
val allScreen = RallyScreen.values().toList()
testRule.setContent {
//the component be tested in isolation goes here
RallyTopAppBar(
allScreens = allScreen,
onTabSelected = {},
currentScreen = RallyScreen.Accounts
)
}
testRule.onRoot().printToLog("currentLabelExists")
....
}
Run Code Online (Sandbox Code Playgroud)
我已使用标签检查了我的 LogCat 的调试和详细过滤"currentLabelExists",但语义树未打印在日志上。
关于我可能会错过什么的任何想法。
android android-jetpack-compose android-jetpack-compose-testing
我有一个屏幕,带有TextFields. 我需要第一个TextField在屏幕显示时自动聚焦。
缩小的示例代码
@Composable
fun ScreenView(
data: ScreenViewData,
) {
val focusManager = LocalFocusManager.current
val focusRequester = remember {
FocusRequester()
}
LaunchedEffect(
key1 = Unit,
) {
focusRequester.requestFocus()
}
Scaffold() { innerPadding ->
Column {
OutlinedTextField(
modifier = Modifier.focusRequester(focusRequester),
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
该代码可以正常运行,没有任何问题。
但是,在撰写 UI 测试时,我收到以下错误。
java.lang.IllegalStateException:
FocusRequester 未初始化。以下是一些可能的修复方法:
- 记住 FocusRequester: val focusRequester = Remember { FocusRequester() }
- 您是否忘记添加 Modifier.focusRequester() ?
- 您是否试图在构图过程中要求焦点?
应针对某些事件发出焦点请求。例如 Modifier.clickable { focusRequester.requestFocus() }
测试代码
@ExperimentalAnimationApi
class ScreenViewTest {
@get:Rule
val composeTestRule …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose android-jetpack-compose-testing
我正在为jetpack 撰写屏幕编写测试,该屏幕上有一个文本字段。在我的测试中,我想在字段中输入一些文本,然后关闭软键盘,然后单击隐藏在软键盘下方的按钮。不过,我找不到在 jetpack 撰写测试中关闭软键盘的方法。我尝试了“performImeAction”,但这并没有关闭键盘,即使您在实际与此文本字段交互时按下软键盘上的 IME 键,它也会关闭键盘。
我希望能够做到这一点,但在组合测试中:
onView(withId(R.id.text_field)).perform(typeText("100"), closeSoftKeyboard())
Run Code Online (Sandbox Code Playgroud)
我当前的撰写代码在字段中输入“100”然后抛出错误:
composeTestRule
.onNodeWithTag(TEXT_FIELD_TAG)
.performTextInput("100")
composeTestRule
.onNodeWithTag(TEXT_FIELD_TAG)
.performImeAction() <------------- This fails
Run Code Online (Sandbox Code Playgroud)
报告错误:
java.lang.AssertionError: Failed to perform IME action as current node does not specify any.
Semantics of the node:
Node #48 at (l=0.0, t=748.0, r=788.0, b=1141.0)px, Tag: 'TEXT_FIELD_TAG'
ImeAction = 'Default'
EditableText = '100'
TextSelectionRange = 'TextRange(3, 3)'
Focused = 'true'
Actions = [GetTextLayoutResult, SetText, SetSelection, OnClick, OnLongClick, PasteText]
MergeDescendants = 'true'
Has 7 siblings
Run Code Online (Sandbox Code Playgroud)