0

我有一个使用远程 webdriver 的 selenium 脚本。我timer.scheduleAtFixedRate(new TimerTask()用来输出我的数据,但是当我PrintWriter writer = response.getWriter();用来输出writer.prntln("Testing Started");时,它在定时器内时不会显示在网页上。但它在定时器之外工作。此外,如果我system.out.println在计时器内这样做,它也可以工作。

protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {

    int delay = 1000;
    int period = 1000;
    Timer timer = new Timer();

        timer.scheduleAtFixedRate(new TimerTask()
        {

            PrintWriter writer = response.getWriter();
            int count = 0;
            public void run()
            {

                              //WebDriver actions in here.


                }
           }, delay, period);
4

1 回答 1

1

我认为问题在于Timer产生了一个新线程,因此run()方法内的代码是异步执行的。当它被执行时,你的doGet()方法很可能已经完成并且响应被刷新了。

在 servlet 方法中创建新闻线程通常是个坏主意。如果你真的想做异步处理,你可能想看看 Servlet 3.0 规范中的异步 servlet。

我不确定您要实现什么,但可能有比使用Timer对象更简单的方法。如果您只想在循环内延迟当前线程的执行,则可以Thread.sleep()改用。

于 2013-09-30T22:04:03.557 回答