我们有资源管理器菜单(基于GWT + ExtJS)。菜单中的树节点根据屏幕分辨率动态显示。所以这里是粗略的可视化
现在,当页面最初加载时,资源管理器菜单仅显示Leaf3之前的节点(即在DOM中仅存在Root,Parent,Child,Leaf1,Leaf2,Leaf3节点)。现在当我向下滚动Leaf4时,Leaf5..Leaf10变得可见,Root,Parent,Child变得不可见(在DOM中不可用)..再次如果我srcoll up Root,Parent,Child变得可见而leaf4,leaf5,leaf10是不可见的。
围绕树面板的DIV元素是具有“overflow:auto”样式的元素
<div unselectable="on" class="x-tree3-node-ct x-tree3 x-component x-unselectable" role="group" tabindex="0" hidefocus="true" id="x-auto-2" aria-activedescendant="x-auto-2__x-auto-2_x-auto-110" style="display: block; overflow: auto; width: 248px; height: 386px;"><div unselectable="on" id="x-auto-2_x-auto-3" class="x-tree3-node" role="presentation">
我有多个用例,我必须向上和向下滚动才能到达根节点和叶节点。所以我试图找出自动化的最佳方法。
我正在使用WebDriver 2.35(java)
我尝试了以下代码,但如果我想频繁上下滚动
,效率不高public void scrollToTreeElement(String treeNodeText){
String nodeElement = HTMLElement.ADMIN_TREE_NODE+"[contains(text(),'"+treeNodeText+"')]";
WebElement treeNode = null;
try{
treeNode = driver.findElement(By.xpath(nodeElement));
treeNode.click();
logger.info(treeNode.getText());
}catch(NoSuchElementException e){
logger.info("inside catch");
String allElements = "//*[@class='x-tree3-node']";
List<WebElement> allSNMPElements = driver.findElements(By.xpath(allElements));
for(WebElement element : allSNMPElements){
// here i am filtering allElements that doesnt have 'span' node (that has tree text) and then scroll to this element
if(element.findElements(By.tagName("span")).size()==0){
scrollToViewPort(element);
}
}
List<WebElement> allTreeNodes = driver.findElements(By.className("x-tree3-node-text"));
}
}
public void scrollToViewPort(WebElement element){
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);",element);
}
任何指针..?