我们在从Ajax调用填充的ultra web grid控件中输入值,但是当Ajax调用完成时,我们找不到错误元素。
完整顺序如下:
页面上的元素:保存和取消图标,文本框,下拉列表,项目选择器,弹出窗口,文本区域,空白Infragistics超网网格。首次加载页面时,除超网网格外,所有控件都将初始化。现在,用户单击项目选择器并从弹出窗口中选择一个项目。此操作通过 Ajax 调用初始化页面上的项目详细信息及其数量的超级 web 网格。
现在我们无法引用页面上的超网网格。请注意,我们可以引用所有其他控件。
命令序列:
- clickAndWait | id=lnkNew
- 单击 | id=C1_stdItemNumber_btnAuto Click |//table[@id='C1xstdItemNumberxgrd_main']//
- tbody/tr//td/nobr[contains(text(),'textItem')]
- clickAndWait |//button[@type='button']
- waitForVisible| id=C1xgridActivity_main
- fireEvent | id=C1xgridActivity_main | focus
- fireEvent | css=#C1xgridActivity_rc_0_2> nobr | focus "This is failing"
- clickAt | css=#C1xgridActivity_rc_0_2> nobr "This is failing"
- doubleClickAt| id=C1xgridActivity_rc_0_8 "This is failing"
- type | id=C1xgridActivity_tb | 1 "This is failing"
我解决了这个问题。
问题是当你加载一个页面时,在DOM中所有的CSS对象都被初始化,但后来当Ajax调用被处理和完成时,CSS对象不能在同一页面中重新初始化,只有Ajax调用处理的对象被初始化/填充。
您可以使用 XPATH 解决此问题。在 Ajax 调用完成后,您可以引用页面上的所有元素。在这种情况下,将传递 WaitForElement 命令,但稍后当您尝试访问元素的值时,这将失败,当您使用 CSS 引用元素时。
如果使用 jQuery 库,您可以使用以下命令等待 AJAX 调用完成waitForCondition
:
waitForCondition | selenium.browserbot.getCurrentWindow().jQuery.active == 0; | 20000