问题标签 [testfx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - TestFX 与 Java 13 兼容吗?
我目前正在使用OpenJDK 13、JavaFx 14e-ea+2、testfx-junit 4.0.16-alpha和testfx-core 4.0.15-alpha 我都从 8 更新,现在 testfx 测试出现错误。错误是:
java.lang.NoSuchMethodError: 'org.testfx.internal.JavaVersionAdapter$JavaVersion org.testfx.internal.JavaVersionAdapter.currentVersion()'
- /li>
这个 testfx 版本是否与最新的 javafx 和 jdk 兼容?
java - Maven Surefire 插件未正确使用 TestFX 执行集成测试
我有一个使用 TestFX 作为测试框架的 JavaFX 应用程序。不幸的是,当-Dtestfx.robot=glass -Dglass.platform=Monocle -Dmonocle.platform=Headless -Dprism.order=sw
通过mvn test
(使用 Maven Surefire 插件)以无头模式(使用选项)执行测试时,JavaFX 应用程序不会启动并且测试会无限期地运行,而在非无头模式下执行它们时,所有测试都会通过。我什至没有收到任何异常或错误消息。
通过 IDE(我使用 IntelliJ)执行测试时,测试也可以在无头模式下工作。
我正在使用 Java 11 和 Maven 3.6.3。Surefire 插件是最新版本 (3.0.0-M4)。
关于这个问题的任何想法?
java - 为什么没有点击正确的 TextField TestFX?
我在按钮栏中有 2 个文本字段。我给了两个fxid。两个文本字段彼此相邻。
左边的文本字段有一个 fx:id
newCol
而右边的 texfield 有一个 fx:idName
我正在做以下测试
预期的结果应该是它首先转到左侧的文本字段,然后对命令进行授权。然后它应该在正确的文本字段中输入另一条消息。
然而,发生的事情是在将第一条消息输入到左侧文本字段之后,应该在右侧文本字段中键入的下一条消息也被键入到左侧文本字段中。就在第二条消息之前,鼠标确实略微向右移动。
现在当我交换两行时,如下所示
应首先将消息输入到正确的文本字段中。但是,它仍然被输入到左侧的文本字段中。两条消息都是。
如果我只是在不指定 fx:id 的情况下执行以下操作,它仍然会在左侧文本字段中输入
我猜我使用 testfx 非常错误或其他什么,因为我对它很陌生,这是我第一次进行任何类型的测试。如果有人可以帮助我,那就太好了。
编辑:好的,我通过点击关闭应用程序的按钮再次测试它,但是它没有这样做,表明测试没有点击我给它的 fx:ids。为什么会这样?我不知道。
java - press(KeyCode.Enter) 不能多次使用 TestFX?
我正在使用 jdk 11 的 junit5 Testfx。我有以下测试
两者newCol
都是newCard
文本字段。
预期的结果应该是机器人首先进入newCol
并在按下回车后它应该进入newCard
并执行相同的操作。
但是,它进入newCol
并按下输入正常,但在第二次按下时它不起作用。为什么会这样。只能press(KeyCode)
按一次吗?
如果有人可以请帮助我,我将不胜感激。
java - JavaFX:在 Maven 测试构建期间填充模拟列表视图会导致空指针异常
lvSelected.setItems(selectedList) 方法会导致以下代码出现空指针异常,但仅当我尝试使用 Maven 清理测试时,并且仅在使用 32 位 JRE 时。这可能是什么原因造成的?当我调试时,ListView 和 ObservableList 似乎都不为空。
这是代码的一部分,使用 setItems 方法时测试方法失败:
这是堆栈跟踪:
java - 在 Java 中测试覆盖的 EventHandler(JavaFx,Spring Boot)
我一直在使用带有 JavaFX 前端的 Spring Boot 用 Java 编写一个小型应用程序。
我无法确定如何测试其中一个控制器的一部分。具体来说,控制器包括一些事件处理,用于何时按下“确认”或“取消”按钮。按确认应该会导致从数据库和表格视图中删除所选项目。按任一按钮应导致当前窗口关闭。
对于测试,我有:
我尝试了几种触发事件的方法,但都没有运气。我尝试用模拟替换按钮,注入它,然后直接触发事件。我尝试使用 TestFX 机器人按下按钮(如上)。在这种情况下,您可以看到机器人单击按钮,但断言失败,表明所选项目未被删除等。
每种方法都感觉有点“执行不力的集成测试式”,所以我觉得我什至可能需要重构它以将事件处理移到其他地方?
有人可以建议如何解决这个问题并获得适当的测试覆盖率吗?在这个阶段,我正在用头撞墙。
我知道代码有效,因为我已经对其进行了广泛的手动测试,但无法弄清楚如何对其进行单元测试。
谢谢你。
编辑:我现在发现这个问题实际上与我的 Mac 上的安全和隐私设置有关。见下文。
javafx - 为什么在这种情况下我必须使用 GroovyMock?
这是一个 MCVE:
main.groovy:
testfx.groovy:
构建.gradle:
文件 src/main/resources/core/mainWindow.fxml 的详细信息并不重要,但这里有一个示例:
上述测试失败。真正的方法Stage.show()
被调用,它是一个模拟的事实被忽略了。
如果我将其从 a 更改为Mock
a ,则使用GroovyMock
模拟方法show()
并且测试通过。
为什么普通的SpockMock
会被忽略?
java - 改变 TestFX 机器人的速度?
特别是WriteRobot
/ WriteRobotImpl
。它似乎写得很慢,我想让它写得更快。
编辑
为了回应MS的评论,我尝试了这个(注意此时我还没有弄清楚WriteRobot
所涉及的内容,而不是TypeRobot
):
不幸的是,即使设置为 1 毫秒,它似乎对打字速度也没有影响。
编辑
我注意到 Slaw 的评论。
我在运行测试之前设置了该System
属性testfx.robot.write_sleep
:尽管可以从 WriteRobotImpl.java 顶部的源代码中看到它可能有,但这没有效果(见下文)。当我将其设置为 500 毫秒时,它也没有任何效果,这让我得出结论,由于某种原因,那里的代码没有看到该属性,因此设置了默认的 25 毫秒。
注意可能的其他原因:按照那里的代码,似乎WriteRobot.write
总是导致调用WriteRobot.typeCharacterInScene
,然后调用BaseRobot.typeKeyboard
and WaitForAsyncUtils.waitForFxEvents
。后者可能是一个“难缠的客户”:如果每个按下的键都必须“等待事件”冒泡,那么事情很可能无事可做。
仍在尝试找出为什么 org.testfx.robot.impl.WriteRobotImpl.java 顶部的以下行将无法看到该System
属性:
我还想知道该static{...}
代码块是否发生得早于您需要System
在测试运行之前设置属性。我尝试在 gradle.build 中设置此属性。仍然没有成功。
java - 如何使用 TestFX 使用 JavaFXML 测试场景的内容
我想知道在使用 TestFX 时我应该如何在 JavaFXML 中测试某些场景的内容。示例包括以下链接: https ://github.com/TestFX/TestFX/blob/master/subprojects/testfx-junit5/src/test/java/org/testfx/framework/junit5/ApplicationRuleTest.java
https://medium.com/@mglover/java-fx-testing-with-testfx-c3858b571320
第一个链接在测试类中构建场景,后者使用存储在自己的类中的预定义场景。当使用 JavaFXML 而不是 JavaFX 时,我应该如何做类似的事情,其中场景的结构是在 fxml 文件而不是 java 代码中定义的?
javafx - 在窗格上测试 setOnKeyPressed 时,TestFX 不起作用
使用 TestFx 测试 JavaFX 应用程序时遇到问题。我放了一个示例,仅使用 VBox 而不是我在实际应用程序中使用的 BorderPane。我只是用画布填充窗格,使其不为空,但有或没有任何变化。
例如,如果我使用 TextField 而不是窗格,则一切正常:
有什么我在这里想念的吗?在实际应用中,当我按下一个键时,事件被正确捕获。