如何确定dojo网格是否已完成加载?

时间:2012-03-08 15:14:56

标签: dojo

我正在与Selenium合作推动使用Dojo的网站。由于站点的Dojo网格使用延迟加载,因此我的测试框架很难知道网格是否/何时完成加载。但是,Selenium会让你注入Javascript。有没有办法轮询DOM,或直接使用js,以确定网格是否已完成加载?

4 个答案:

答案 0 :(得分:1)

我发现这是一个很好的答案:

grid.connect(grid, '_onFetchComplete', function(){
    for(var i in grid._pending_requests){
        if(grid._pending_requests[i]){
           return; //no, something's not loaded yet.
        }
    }
    //okay, nothing is on the fly now.
});

http://dojo.6188.n7.nabble.com/function-when-the-dataGrid-is-ready-td37563.html

答案 1 :(得分:0)

dojox.grid.DataGrid有一个内部标志,在_onFetchComplete中设置,所以你可以试试

var grid = ...
if (grid._isLoaded) {
    ...
}

答案 2 :(得分:0)

我发现了这个问题,因为我一直在寻找相同的东西。我能得到的最接近的是等待Dojo的加载消息消失(如果网格加载速度很快,很难看到)。这是我现在使用的:

/** Required imports **/
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.By;

/** Code snippet **/
WebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver, /* Max wait time */ 30);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector(".dojoxGridLoading"));

这让我非常接近。

答案 3 :(得分:0)

这是一个使用非内部事件“onStyleRow”的解决方案:

// Declare myGridLoaded
var myGridLoaded = false;
...
...
// Connect onStyleRow:
dojo.connect(grid, "onStyleRow", grid, function(row) {
    if(!myGridLoaded) {
        doYourStuff();
        // Make sure it runs only once:
        myGridLoaded = true;
    }
});
// Now set your store and the handler will run only once 
// when the first row is styled - if any:
grid.setStore(store);