问题描述
Javafx 应用程序 - 无法在登录屏幕上执行机器人操作 - 从主调用时卡在启动时需要继续测试用例 loginlogout 调用。
我想在 javafx 应用程序上运行登录注销测试用例。 我已经运行了主要方法。 我能够启动应用程序。 然后是如何到达测试用例调用。
注意:如果我通过 Junit 运行它,这工作正常。但要求是通过 Main 运行。
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.testfx.api.FxRobot;
import org.testfx.api.FxRobotContext;
import org.testfx.framework.junit5.ApplicationExtension;
import org.testfx.framework.junit5.Start;
import io.mosip.registration.config.AppConfig;
import io.mosip.registration.controller.Initialization;
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.geometry.Pos;
import javafx.geometry.VerticalDirection;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import qa114.pages.DemographicPage;
import qa114.pages.HomePage;
import qa114.pages.LoginPage;
import qa114.pojo.schema.Root;
import qa114.pojo.schema.Schema;
import qa114.runapplication.StartApplication;
import qa114.utility.JsonUtil;
import qa114.utility.PropertiesUtil;
/***
*
* Login and logout RegClient
* Steps Run this using Junit
* First start method invokes and this will launch Registration Client and through dependency injection
*
* Fxrobot will take control of primary stage and perform keyboard and mouse driven activities.
*
*/
@ExtendWith(ApplicationExtension.class)
public class LoginlogoutTest extends Application{
FxRobot robot;
Schema schema;
Root root;
Scene scene;
Node node;
Boolean flagContinueBtnFileUpload=true;
Boolean flagContinueBtnBIoUpload=true;
private static ApplicationContext applicationContext;
private static Stage applicationPrimaryStage;
private static String upgradeServer = null;
private static String tpmrequired = "Y";
LoginPage loginPage;
HomePage homePage;
PropertiesUtil propertiesUtil;
FxRobotContext context;
Boolean result=false;
@FXML
private WebView webView;
@Start
public void start(Stage primaryStage) {
String[] args=new String[2];
try {
System.setProperty("java.net.useSystemProxies","true");
System.setProperty("file.encoding","UTF-8");
io.mosip.registration.context.ApplicationContext.getInstance();
if (args.length > 1) {
upgradeServer = args[0];
tpmrequired = args[1];
io.mosip.registration.context.ApplicationContext.setTPMUsageFlag(args[1]);
}
applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
System.out.println("Automaiton Script - ApplicationContext has taken");
Initialization initialization=new Initialization();
initialization.setApplicationContext(applicationContext);
applicationPrimaryStage=primaryStage;
System.out.println("Title:"+primaryStage.getTitle());
initialization.start(primaryStage);
System.out.println("Automaiton Script - ApplicationPrimaryStage has started");
primaryStage=initialization.getPrimaryStage();
System.out.println("Automaiton Script - Done with Start invoke");
context = new FxRobotContext();
context.setPointPosition(Pos.CENTER);
} catch(Throwable e) {
e.printstacktrace();
}
}
@ParameterizedTest
@CsvFileSource(resources = "/login.csv",numLinesToSkip = 1)
void loginlogout(String userid,String password) throws Exception {
//Set FxRobotContext
robot=new FxRobot();
loginPage=new LoginPage(robot);
//Load Login screen
loginPage.loadLoginScene(robot,applicationPrimaryStage);
//Enter userid and password
loginPage.setUserId(robot,userid);
homePage=loginPage.setPassword(robot,password);
//logout Regclient
result =loginPage.logout(robot);
assertTrue("TestCase Failed",result);
//return result;
}
public static void main(String[] args) throws Exception {
LoginlogoutTest loginlogoutTest=new Loginlogouttest();
Application.launch(LoginlogoutTest.class,args); //TILL HERE WORKING FINE
loginlogoutTest.loginlogout("1111","6666"); // NEED TO REACH HERE
}
}
解决方法
已解决 - 使用线程能够实现这一点..
public static void main(String[] args) throws InterruptedException { //1
LoginLogoutTest lg=new LoginLogoutTest();
Thread thread4 = new Thread() { //3 parallel running
@Override
public void run() {
try {
System.out.println("thread4 inside calling testcase");
Thread.sleep(120000); //Needed
robot=new FxRobot();
LoginLogoutTest lg=new LoginLogoutTest();
lg.loginlogout("110123","mosip123");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
thread4.start();
Application.launch(StartApplication.class,args);//2 infine loop never yeild
} }