问题标签 [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.

0 投票
0 回答
395 浏览

java - 在 testFx 中的场景之间切换

我想用 testFx 测试我的 JavaFX 应用程序。用户填写登录表单,单击按钮 logInBtn,应用程序显示警报并打开客户面板。测试运行并显示警报,但是在这个场景应该切换到另一个场景之后,我得到了很多错误。

}

我的测试课:

登录按钮: <Button fx:id="logInBtn" onAction="#logIn"

登录方法:

我收到这些错误:

我猜它发生 bcs testFX 无法正确访问 JavaFX 线程,所以我无法在场景之间切换。我正在查看 testFX 文档 - 如何在场景之间切换,但我一无所获。有人知道我该如何解决吗?

已解决:问题是 setRoot 函数无法执行,因为场景在基本类中不存在(场景是在测试类线程中创建并打开的,而不是在主线程中)。我添加AppTest.setRoot("catalogAdmin");到测试类,现在它可以工作了

0 投票
1 回答
112 浏览

javafx - BoundsLocatorException 在无头模式下运行 testfx

我正在运行一些 TestFx 测试用例,这些测试用例在我的本地无头模式和有头模式下运行良好,但由于某种原因,当相同的测试在 jenkins 中以无头模式运行时,我在单击某些按钮的行上收到以下消息。

java.lang.RuntimeException:org.testfx.service.locator.BoundsLocatorException:边界在场景中不可见

有谁知道为什么会发生这种情况?

这些是我的无头属性....

0 投票
1 回答
93 浏览

java - TestFx 在 WebView 中检索 HTML 的元素内容

我正在使用 TestFx 在我的 JavaFX 应用程序中编写测试。在我访问 FXML 元素之前一切顺利,但我想知道如何访问 WebView HTML 内容。WebView 是我的应用程序的主要部分,所以我必须为此添加测试。

下面是用于在 WebView 中打开的 HTML 内容示例。

我正在尝试通过以下代码单击 td element id="tb_name" 但它没有用

谢谢你。

0 投票
1 回答
758 浏览

java - 尝试使用由 module-info.java 文件引起的 TestFX 时出现 IllegalAccessError

我使用 JavaFX(来自 Maven)在 Java11 中创建了一个天气应用程序。现在我正在编写一些测试代码。我想测试一些 GUI 功能,例如“当城市名称无效时显示错误消息”,这就是我想使用 TestFX 的原因。问题是每次我想使用 TestFX 运行测试类时都会出现错误:

问题是当我从 src\main\java 中删除 module-info.java 文件时,问题就消失了:

不幸的是,我不能这样做,因为当我想启动我的天气应用程序时出现错误:

总而言之,当我想使用 testFX 测试我的应用程序时出现错误。如果我删除 module-info.java 我可以使用 TestFX 我的应用程序,但我无法运行我的应用程序。

我花了好几个小时才找到这种依赖关系,但我不知道如何解决。也许有更好的方法来测试 GUI?我会很感激你的帮助。

编辑:我找到了解决方案。正如这里所说,我只需要创建一个附加类:如何安装和忘记 java 9 模块(在 Windows 上)? 它可以在没有 module-info.java 文件的情况下运行应用程序,并且使用 TestFX 的测试也可以正常工作。

0 投票
0 回答
188 浏览

javafx - 使用 TestFX 进行 JavaFX GUI 测试在 Github 工作流上失败,但在本地计算机上失败

根据标题,我正在使用 TestFX 在 JavaFX 应用程序的 GUI 上运行一些简单的测试。每当我运行 gradle 测试时,结果将返回 340 次测试中的 340 次测试。然而,在 Github 的 pull request 工作流检查中,它显示 340 个测试通过,1 个失败。

然而在本地,当我运行构建时一切都很好。

我在 TestFX github 页面上找不到任何相关问题。并且在 index.html 中生成的测试报告表明 100% 的文本成功。任何人都可以提供有关此问题的见解?

0 投票
1 回答
181 浏览

javafx - 带有 JUnit4 的 TestFX:如何在某个 TextField 中按 ENTER 键?

我想测试一下,如果某个TextField(可能有几个TextFields)有一EventHandler组 via setOnAction。在测试代​​码中,我可以将内容(例如“HelloWorld”)设置为TextField. 据我了解,我必须将光标放在 TextField 中文本的末尾,然后调用press(KeyCode.ENTER). 是否有 TestFX 调用将光标放置在某个 TextField 中的某个点?还是有另一种方法来测试这个?

问候,约尔格

[编辑] 这是一个例子:

这是测试:

控制台输出为:

0 投票
0 回答
59 浏览

dependencies - 如何在 Maven 项目中安装 TestFX?

我已经在我的 maven 项目中添加了这些依赖项,安装了 maven 包装器并且我正在使用 VSCode。最后一个依赖项给了我一个错误,提示“该元素包含有关项目依赖项的信息。” 无论如何我可以解决这个问题吗?

0 投票
1 回答
183 浏览

javafx - Javafx 应用程序 - 无法在登录屏幕上执行机器人操作 - 卡在启动时需要在从主调用时移动测试用例 loginlogout 调用

Javafx 应用程序 - 无法在登录屏幕上执行机器人操作 - 卡在启动时需要在从 main 调用时继续进行测试用例 loginlogout 调用。

我想在 javafx 应用程序上运行登录注销测试用例。我已经运行了主要方法。我能够启动应用程序。然后如何到达测试用例调用。

注意:如果我通过 Junit 运行它,它工作正常。但要求是通过 Main 运行。

0 投票
1 回答
140 浏览

java - 如何在使用 TestFX 测试的控制器中模拟方法?

下面是 TestFX 的测试片段,直接从他们的GitHub README中提取:

我的问题是,特别是改变场景/根源的动作。正在测试的控制器/场景的方面在最后更改了根,这会产生以下堆栈跟踪:

我的解决方案是,正如您可能看到的那样,我为其中的静态方法创建了一个服务包装类App(例如setRoot导致 NPE),如果我可以访问控制器,理论上我可以用莫基托。不幸的是,如果您回到上面的代码示例,似乎没有任何访问控制器类的概念。您可以获得表面级别的创建和与舞台的交互,但我无法弄清楚如何访问底层控制器。当然,我需要访问物理控制器才能模拟它的服务类。

有谁知道我如何访问该类,以便我可以将其包装类设置为模拟版本?

如果有人想实际使用它,我可以提供源代码。

0 投票
0 回答
128 浏览

java - 是否有 javafx.fxml.Initializable 的替代方法可以在场景开始时运行代码?

主要目标是在加载场景时运行代码,我知道 Initializable 是推荐的解决方案,我一直在使用它,除了我遇到的问题是它不利于集成测试。

我的初始化方法中的逻辑依赖于以前的场景,所以当我只加载这个屏幕时,我得到了一些 NullPointer 异常,因为我期望存在的一些东西不存在。

我无法模拟这些,因为使用 TestFX,initialize 方法在 setup 的第一行运行,FXMLLoader loader = new FXMLLoader(getClass().getResource("test.fxml"));.

从那里,我可以loader.getController();访问生成的控制器并模拟某些类字段和东西,但问题是在初始化方法运行之前我不能这样做。这是一个 catch 22 情况,因为要访问控制器javafx.fxml.FXMLLoader必须运行,但是当它运行时它会自动执行初始化方法,否则我需要模拟部分或生成预期信息。

那么,我有哪些选择?有没有办法在没有 Initializable 的情况下在场景开始时运行代码?