Software testing is indispensable to assure software quality. Traditional software testing techniques are insufficient for modern web applications due to their unique characteristics, such as highly dynamic generation of web pages and interactions with DOM elements. Meanwhile, existing web testing techniques are cumbersome to use in long-term maintenance and evolution because the tests are often brittle in the presence of fast changes to web pages. In this paper, we propose an automatic test generation technique for dynamic web applications. Our technique effectively decouples test code from web pages by automatically generating page objects. Based on page objects, our technique performs iterative feedback directed random test generation. Our evaluation on seven real-world web applications demonstrates that the proposed technique achieves reasonable code coverage (from 23.3% to 90.8%) and can effectively explore dynamically generated web pages (around 14.7 times more than the original static web pages), revealing hundreds of HTML issues and five real errors in the applications.