0

エクスプローラー メニュー (GWT + ExtJS ベース) があります。メニューのツリー ノードは、画面解像度に基づいて動的に表示されます。ここに大まかな視覚化があります

        • 葉1
        • リーフ 2
        • リーフ3
        • .
        • .
        • 葉10

ページが最初にロードされると、エクスプローラー メニューには Leaf3 までのノードのみが表示されるようになりました (つまり、DOM では Root、Parent、Child、Leaf1、Leaf2、Leaf3 ノードのみが存在します)。ここで、下にスクロールすると、Leaf4、Leaf5 ..Leaf10 が表示され、Root、Parent、Child が非表示になります (DOM では使用できません)。もう一度、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);               
}   

任意のポインター..?

4

0 に答える 0