代码仅执行一次。 免责声明:非常清楚这是一个无限循环,以这种方式编写它是解决问题的一部分。
更新:我的错误日志中有一个已解决的异常,问题仍然相同,代码仅执行一次
我尝试在同一代码中使用相同的for
循环来执行不同的任务(打印句子),但工作正常,问题一定出在我的JS代码上。
for(int i=0; i<i+1;i++) {
((JavascriptExecutor)driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
driver.get("https://www.google.com");
}
答案 0 :(得分:1)
由于抛出异常,代码仅执行一次,或者您正在进行的一个或多个网络调用时间过长,使您认为代码仅执行一次。
要确认您在for循环中使用的值i + 1
不会被1
取代,我在计算机上运行了以下循环:
for (int i = 0; i < i + 1; i++) {
System.out.println(i);
}
...然后继续打印从0开始的数字。
答案 1 :(得分:0)
我只想澄清这一点作为答案,因为我希望这个问题能够解决。
for循环不是您的问题。您正在编写有异常或正在阻止正在运行的线程的代码。如果您使用另一个线程来运行此线程,则缺少UncaughtExceptionHandler
可能会使其跳过记录。同样,使用Callable<T>
可能会导致个人经验(也许是出于相同的原因?)吞没了例外。
如果您要阻止正在运行它的线程,那么该线程将不会运行任何其他操作,直到阻塞方法将控制权返回给您调用它的上下文为止。
鉴于您说您遇到了循环“运行一次”但仍在打印后的情况,我将其作为例外,并且您运行测试的方式存在缺陷。这可能有多种原因,例如愚蠢的System#exit
/ Runtime#halt
调用,线程,使用服务运行测试或在某些生产环境(例如游戏服务器或计算机)中运行测试电话(或...浏览器?)。对于将来的情况,理想情况下,除了主要方法和您提供的代码外,您的问题应该可以重现。如果您无法举这样的例子,则至少应提供如何进行测试。
如果您完成所有这些操作后仍然遇到问题,我想这对您来说很明显,或者在这里阅读您问题的人可以轻松地为您回答问题。