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