了解jqGrid是否已加载并准备好使用Selenium的最佳方法
您如何通过selenium了解jqGrid是否已加载并准备好使用 一些细节:了解jqGrid是否已加载并准备好使用Selenium的最佳方法,selenium,jqgrid,Selenium,Jqgrid,您如何通过selenium了解jqGrid是否已加载并准备好使用 一些细节: 我正在使用C#驱动程序 我有一个方法:newwebdriverwait(driver,newtimespan(0,0,0,30)).Until(x=>loadingdissaperedcondition)我用它来等待加载。。元素消失了 我有时也会使用以下脚本: private const string script=@“return($('.{0}').jqGrid('getGridParam','reccount
- 我正在使用C#驱动程序
- 我有一个方法:
我用它来等待加载。。元素消失了newwebdriverwait(driver,newtimespan(0,0,0,30)).Until(x=>loadingdissaperedcondition)
- 我有时也会使用以下脚本:
private const string script=@“return($('.{0}').jqGrid('getGridParam','reccount')!=x未定义)&($('.{0}').jqGrid('getGridParam','reccount')!=0)&(!$('load{0}')。is(':visible')&('getGridParam','reccount busyIcon')。is(':visible'))”)代码>
查找jqGrid是否有记录并已完成加载
我需要更好的东西,因为如果我们使用jqGrid的本地数据,即使上面两个也不会让驱动程序等待加载完成。我还想知道什么是最好的方法,或者至少是其他人如何处理这个问题。我以前从未使用过硒,所以我不确定我是否正确理解了你的问题。jqGrid将首先初始化,然后(可选)可以从服务器加载数据。在初始化阶段,原始的
元素将转换为相对复杂的HTML片段,即网格。初始化结束时,表的DOM元素($(“#网格”)[0]
)将获得expando网格
所以你可以像这样使用测试
if($(“#网格”)[0].grid){
//网格已初始化
}
以确定网格已初始化。jqGrid在内部使用相同的测试(参见示例)。这里是Java和jqGrid的解决方案。
若网格数据还并没有加载,那个么右边的寻呼机并没有值,所以只需检查它的长度。isElementPresent、isDisplayed等方法似乎不适用于网格右分页器对象。ajax时,它总是出现在页面代码中,但在加载动态数据时设置文本值
public void waitForGridPagerRight(String gridName) throws Exception {
for (int second = 0;; second++) {
if (second >= 15) {
fail("Timeout.");
}
try {
if (driver
.findElement(By.id("pager_" + gridName + "_right"))
.getText().length() > 2)
break;
} catch (Exception e) {
}
Thread.sleep(1000);
}
}
不知道为什么@Oleg的回答对我不起作用。看起来网格甚至在ajax调用之前就已经被填充了。看起来新版本可能有一些变化。看起来ajax调用中最后发生的事情是“加载”块被隐藏,因此我找到了该元素并检查其显示属性a la:
def wait_for_jqgrid(self,t=20):
def检查网格(驱动程序):
#jqgrid在ajax调用之后做的最后一件事是关闭loading div
#因此,我们找到它并检查它的display属性是否不再设置为“none”
script='pid=$.jgrid.jqID($(.ui-jqgrid-btable”).get(0.p.id);return$(“#load"+pid).get(0).style.display==“无”;”
返回驱动程序。执行_脚本(脚本)
WebDriverWait(self.driver,t).直到(检查jqgrid)
当加载div被隐藏时,我们就完成了。这是python,但相同的javascript位应该在Java或其他语言中工作。网格初始化后,它将进行ajax调用以从服务器获取数据。稍后,每当ppl也刷新网格时,它都会调用以获取数据。我基本上想要一个脚本,当jqGrid加载时返回'true',当它空闲时返回'false'-如果我能得到这样一个脚本,我就可以在selenium中执行它。@Zasz:只有当datatype:“json”
或datatype:“xml”
时,才存在对服务器填充数据的请求。它取决于其他设置,如(loadonce:true
)。根据用户的活动,可以从服务器重新填充网格。例如,如果用户按列排序,单击下一页等,新请求将发送到服务器,网格的内容将刷新。您可以使用beforeRequest
、beforeProcessing
和loadComplete
或loadError
回调来控制何时启动和何时结束对服务器的请求。是的,这些回调最接近我所需要的—但我无法控制何时执行它们。我将使用selenium进行轮询,以了解何时加载jqgrid(轮询=仅以500毫秒的间隔执行脚本)。虽然回调告诉我jqGrid的状态,但我需要在轮询时使用一个脚本来告诉我jqGrid的状态。谢谢你花时间帮我。@Zasz:不客气!您只需定义一个变量,如var inload在外部范围内编码>并在请求前将其设置为中的true
,然后在loadComplete
或loadError
的内部将其重置为false
。您可以在作用域中定义变量(例如作为全局变量),您可以使用Selenium轻松访问该变量。。。
public void waitForGridPagerRight(String gridName) throws Exception {
for (int second = 0;; second++) {
if (second >= 15) {
fail("Timeout.");
}
try {
if (driver
.findElement(By.id("pager_" + gridName + "_right"))
.getText().length() > 2)
break;
} catch (Exception e) {
}
Thread.sleep(1000);
}
}