我正在写这个与我之前的主题相关的问题:
从 java 代码运行 bat 文件以在 txt 文件中获得所需的结果 - 没有办法:( 简而言之:我用 java 编写了一个运行 bat 文件的程序。此 bat 文件运行执行桌面应用程序测试的 TestComplete8 脚本。测试完成后,bat 文件生成名为 result.txt 的文件,并将测试信息打印到该文件中。我现在遇到了另一个问题:现在从我的 java 代码中,我想等到 bat 运行完成。我通过循环直到存在名为 result.txt 的文件来做到这一点。我猜这不是最好的解决方案,但我认为它可以工作,也尝试了不同的解决方案。发生的情况是它将正常循环并等到文件存在,但 testcomplete 不执行测试。这很奇怪,因为 testcomplete 运行,我可以看到测试开始了,我的 AUT 也开始了,但没有任何反应。Testcomplete 正在等待任何对象并且没有 t 单击任意位置,等待预定义的操作时间用完。当我在代码中没有任何等待的情况下运行测试时,一切都很好。我只是不明白为什么在启用等待时测试期间什么都没有发生,为什么当我删除任何 do-while 或 waitFor() 时它工作正常,甚至我尝试在单独的线程中运行它。:(
我有一种感觉,它可能与操作系统有某种关系,并且与进程有关,因为它运行类似于 bat 作为进程的东西,而不是 bat 运行它的子进程作为 testcomplete 或类似的东西。感谢您的任何回答
所要求的源代码:现在我正在尝试使用修改后的 bat 文件的解决方案:
@ECHO OFF
"C:\Program Files (x86)\Automated QA\TestComplete 8\Bin\TestComplete.exe" "C:..." /r /p:projname PathToApp="C:\...p" Login=... Password=B1 /t:"KeywordTests|..." /exit
在最新版本中运行和等待的代码是:
new Thread(new Runnable() {
public void run() {
File file = new File("D:\\");
int exitValue = -1;
try {
Process process = Runtime.getRuntime().exec(batch, null, file);
while (true) {
try {
exitValue = process.exitValue();
System.out.println(exitValue);
break;
} catch (IllegalThreadStateException e) {
// e.printStackTrace();
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("Waiting for process...");
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();