java - 将 TestFX 与 Cucumber 一起使用
问题描述
我正在尝试将 Cucumber 与 TestFX 一起使用,但无法从应用程序中获取任何节点。
我有另一类 TestFX 可以正常工作,另一类 Cucumber 也可以正常工作。但我越来越
org.loadui.testfx.exceptions.NoNodesFoundException:没有节点匹配'TextInputControl 有文本“你能找到这个标签吗”'。
测试基础:
import javafx.scene.Node;
import javafx.scene.input.KeyCode;
import javafx.scene.input.MouseButton;
import javafx.stage.Stage;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.testfx.api.FxToolkit;
import org.testfx.framework.junit.ApplicationTest;
import java.util.concurrent.TimeoutException;
public class TestFXBase extends ApplicationTest {
private static boolean isHeadless = false;
@BeforeClass
public static void setupHeadlessMode() {
if(isHeadless){
System.setProperty("testfx.robot", "glass");
System.setProperty("testfx.headless", "true");
System.setProperty("prism.order", "sw");
System.setProperty("prism.text", "t2k");
System.setProperty("java.awt.headless", "true");
}
}
@Before
public void setUpClass() throws Exception {
ApplicationTest.launch(Main.class);
}
@Override
public void start(Stage stage) throws Exception {
stage.show();
}
@After
public void afterEachTest() throws TimeoutException {
FxToolkit.hideStage();
release(new KeyCode[]{});
release(new MouseButton[]{});
}
/* Helper method to retrieve Java FX GUI Components */
public <T extends Node> T find (final String query){
return (T) lookup(query).queryAll().iterator().next();
}
}
这是我的 testfx 基类,我的黄瓜跑步者和 stepdefs 扩展了它。
StepDefs:
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import org.junit.Test;
public class MyStepdefs extends TestFXBase {
@Test
@Given("^That \"([^\"]*)\" Exists$")
public void thatExists(String arg0) throws Throwable {
rightClickOn("#rect");
}
@Test
@Then("^Which is \"([^\"]*)\"$")
public void whichIs(String arg0) throws Throwable {
System.out.println(arg0);
}
}
亚军:
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(plugin = { "pretty" })
public class MyRunner extends TestFXBase{}
特征:
特征:标签文本是否存在?
场景:你能找到这个标签文本吗
鉴于“你能找到这个标签吗”存在
那么哪个是“伟大的”
因此,参数已传递,但 TestFX 并未在我的黄瓜运行器中启动应用程序,只是尝试查找节点。有一个类扩展了 TestFXBase 并且可以完美运行。我该如何解决这个问题?
编辑:我的依赖是
<dependency>
<groupId>org.loadui</groupId>
<artifactId>testFx</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>org.jfxtras</groupId>
<artifactId>openjfx-monocle</artifactId>
<version>1.8.0_20</version>
</dependency>
<dependency>
<groupId>org.testfx</groupId>
<artifactId>testfx-core</artifactId>
<version>4.0.6-alpha</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>org.testfx</groupId>
<artifactId>testfx-junit</artifactId>
<version>4.0.6-alpha</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
解决方案
这里的解决方案是将 setupHeadlessMode 和 setUpClass 方法的内容移动到 TestFXBase 类初始化程序:
static {
if (isHeadless) {
System.setProperty("testfx.robot", "glass");
System.setProperty("testfx.headless", "true");
System.setProperty("prism.order", "sw");
System.setProperty("prism.text", "t2k");
System.setProperty("java.awt.headless", "true");
}
try {
ApplicationTest.launch(Main.class);
} catch (Exception e) {
// oh no
}
}
推荐阅读
- python - 如何检查Windows中是否启动了新进程?
- java - 如何从嵌套的 JSON 对象中获取特定值?
- batch-file - 如何从 .ini 读取输入变量并输出到 separet 文件?
- python - 将 'period_' 添加到 'value' 之前的所有列名
- jquery - 如何使用jquery找出某人在页面上停留了多长时间
- javascript - window.onload = function() in `_Layout.cshtml` 无限循环(ASP.NET Core)
- java - 无法使用 http:// 连接到 phpmyadmin
:port 得到 403 禁止 - r - 如何将秒数转换为时间序列?
- pybind11 - 当我使用 pybind11 为我的 c++ 项目构建 so 文件时,我得到了错误,我认为这是因为 python 库
- c++ - 缺少 C/C++ 的 gcc 文件