2012 · Journal article
Crawling Ajax-Based Web Applications through Dynamic Analysis of User Interface State Changes
Crawljax infers a state-flow graph of an Ajax web application by driving it in a real browser. It scans the DOM for candidate clickable elements, fires events on them, compares the resulting DOM against known states with configurable comparison and similarity thresholds, and records new states and the event transitions between them, backtracking by reloading and replaying paths. A concurrent variant partitions the crawl across browser instances. The Java tool uses Selenium WebDriver and plugins; one plugin writes a static mirror of the crawled states. The authors evaluate six open-source and industrial sites and measure how the number of concurrent browsers affects crawling runtime on Google AdSense.
Scope and limitations
Crawljax recovers client-side UI states and navigation transitions, not application source code, server-side logic or a complete behavioral model. The inferred graph is one snapshot instance: click order, server-side factors and state-explosion limits such as depth, time and state caps affect what is found. With default settings it clicks each element once and missed elements that only appear after repeated clicks: 33 of 36 annotated elements were found in Pet Store, and 38 of 40 sampled clickables across four external sites. No gold standard or comparable Ajax crawler was available, so accuracy was assessed by injected elements, a manual reference model and spot checks. External sites change over time, and the concurrent study ran at Google on AdSense. The reviewed 2023 repository is a later Java 11 and Selenium 4 codebase, not the 2012 evaluation build.
Why it fits this collection
Adds a classic dynamic-analysis method for recovering a running web application’s UI state machine, complementing the section’s screenshot-, video- and code-based reconstruction research.
Publication and review details
- Venue
- ACM Transactions on the Web
- Status
- Journal article
- Publication / posting date
- March 2012
- Date source
- ACM’s Crossref deposit gives March 2012 for print and online publication, matching the article footer’s “Publication date: March 2012”. The archived ACM page’s 01 March 2012 is read as the issue month, so month precision is retained.
- DOI
- 10.1145/2109205.2109208
Crossref and the archived ACM page give the three authors, ACM Transactions on the Web volume 6, issue 1, pages 1–30; the article’s reference format gives Article 3 (March 2012), 30 pages. The text was reviewed in the 30-page author copy on Ali Mesbah’s UBC site; the ACM page holds the version of record. The article is a revised and expanded version of the authors’ ICWE 2008 paper. It describes Crawljax as Apache-licensed and available from crawljax.com. The code link is the crawljax/crawljax repository, whose largest contributor is the first author; the reviewed 2023-06-19 commit carries an Apache-2.0 LICENSE, version 5.2.4-SNAPSHOT, Java 11 and Selenium 4.9.0. No code or experiments were run.
Sources reviewed
Source review only; experiments were not rerun for this collection. Cite the original authors using the linked paper or BibTeX.
Primary sources
- https://dl.acm.org/doi/10.1145/2109205.2109208
- https://web.archive.org/web/20250216232237/https://dl.acm.org/doi/10.1145/2109205.2109208
- https://api.crossref.org/works/10.1145/2109205.2109208
- https://people.ece.ubc.ca/amesbah/resources/papers/tweb-final.pdf
- README.md GitHub · crawljax/crawljax · Revision 5771f61
- LICENSE GitHub · crawljax/crawljax · Revision 5771f61
- pom.xml GitHub · crawljax/crawljax · Revision 5771f61