Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Count all outstanding AJAX requests
Browse files Browse the repository at this point in the history
  • Loading branch information
seanf committed Jan 21, 2015
1 parent c1013ab commit fbdf667
Showing 1 changed file with 28 additions and 14 deletions.
42 changes: 28 additions & 14 deletions functional-test/src/main/java/org/zanata/page/AbstractPage.java
Expand Up @@ -46,7 +46,33 @@ public class AbstractPage {
private final WebDriver driver;
private final FluentWait<WebDriver> ajaxWaitForSec;

static final String AJAX_COUNTER_SCRIPT = "(function(xhr) {\n" +
" if (xhr.active === undefined) {\n" +
" xhr.active = 0;\n" +
" var pt = xhr.prototype;\n" +
" pt._send = pt.send;\n" +
" pt.send = function() {\n" +
" XMLHttpRequest.active++;\n" +
" this._onreadystatechange = this.onreadystatechange;\n" +
" this.onreadystatechange = function(e) {\n" +
" if ( this.readyState == 4 ) {\n" +
" XMLHttpRequest.active--;\n" +
" }\n" +
" if ( this._onreadystatechange ) {\n" +
" var fn = this._onreadystatechange.handleEvent || this._onreadystatechange;\n" +
" fn.apply(this, arguments);\n" +
" }\n" +
" };\n" +
" this._send.apply(this, arguments);\n" +
" }\n" +
" }\n" +
"})(XMLHttpRequest);\n";

public AbstractPage(final WebDriver driver) {
// FIXME avoid cast
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript(AJAX_COUNTER_SCRIPT);

PageFactory.initElements(new AjaxElementLocatorFactory(driver, 10),
this);
this.driver = driver;
Expand Down Expand Up @@ -158,28 +184,16 @@ public void waitForPageSilence() {
@Override
public boolean apply(WebDriver input) {
int ajaxCalls;
int jQueryCalls;
try {
jQueryCalls = Integer.parseInt(
((JavascriptExecutor) getDriver())
.executeScript("return jQuery.active")
.toString()
);
} catch (WebDriverException jCall) {
jQueryCalls = 0;
}

try {
ajaxCalls = Integer.parseInt(
((JavascriptExecutor) getDriver())
.executeScript(
"return Ajax.activeRequestCount")
.executeScript("return XMLHttpRequest.active")
.toString()
);
} catch (WebDriverException jCall) {
ajaxCalls = 0;
}
return ajaxCalls + jQueryCalls == 0;
return ajaxCalls == 0;
}
});
}
Expand Down

0 comments on commit fbdf667

Please sign in to comment.