2017-05-25 8 views
1

jstreeを使用してjspページでJavaアプリケーション用のセレンテストを作成しようとしています。私はこれをほとんどやっていませんが、私はそれに続く基本的なテストがかなりあります。セレンテスト - クリックしてjstreeノードを展開します

本質的にIDは自動生成されるので、xpathを使用して特定のポイントを特定しています。ページ上で、私が選択したいと思っているリーフは隠されています(テストでは利用できません)。したがって、単体テストの最初のタスクは、特定のリンクを拡張することです。そのため、子ノードはレンダリングされ、実際のテストに使用できます。この鍵を保持しているように見える要素は、iタグです。明快


ため

EDITあなたはhttps://www.jstree.com/demo/を見れば、私は基本的にJavaのセレンテスト(にLEDの下でビルノードに取得しようとしているので、あなたがソースを見れば、あなたはそこにページを開いたときビルディングへの参照はありませんが、LEDノードを開くとhtmlがレンダリングされます)。私はこれが理にかなったと思う? Chromeデベロッパーツールを使用して


<li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="M[randomnumber]_anchor" aria-expanded="false" id=" M[randomnumber]" class="jstree-node treeNodeTextParentLevel3 jstree-closed">  
    <i class="jstree-icon jstree-ocl" role="presentation"></i> 
    <a class="jstree-anchor" href="#" tabindex="-1" id=" M[randomnumber]_anchor "> 
     <i class="jstree-icon jstree-checkbox" role="presentation"></i> 
     <i class="jstree-icon jstree-themeicon" role="presentation"></i> 
    Visible leaf text</a> 
    </li> 

<i class="jstree-icon jstree-ocl" role="presentation"></i> 

はあなたが子ノードを展開するクリックする必要な要素であることを私に伝えます。

これは私が

driverWait.until(ExpectedConditions.elementToBeClickable(
      By.xpath("//aside/div/div/ul/li[@id=’knownId] ']/ul/li[contains(@id,'M')]/i"))).click(); 

をしようとすると、私はエラーを取得する)だから私はこの

1へ2つのアプローチを使用している

aria-expanded="true" 

class="jstree-node jstree-open" 

を設定します

Element <i class="jstree-icon jstree-ocl" role="presentation"></i> is 
> not clickable at point 

これはおそらくiタグにとっては公正だと思われますか?

2)だから私は、属性

WebElement element = driver.findElement(By.xpath("//aside/div/div/ul/li[@id=’knownId']/ul/li[contains(@id,'M')]")); 
JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("arguments[0].setAttribute('aria-expanded',arguments[1]);", element, "true"); 
js.executeScript("arguments[0].setAttribute('class',arguments[1]);", element, "jstree-node jstree-open"); 

が、この場合には、ツリーの葉が展開されていない

を変更することによって、直接それを実行しようとしました(ただし、私は(「ARIA展開」element.getAttributeを行う場合) ;その後、たとえば属性が更新されているため、テスト中のページで何もしないようです)、実際にテストしたい子アイテムを選択することはできません。

誰でも正しい方向に私を指摘できますか?あなたがしたい場合は

// tree menu present under iframe so need to switch into iframe first 
driver.switchTo().frame(0); 

// used to click on expand option of LED 
WebElement element = driver.findElement(By.xpath(".//*[@id='LED']/i")); 
JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("arguments[0].click();",element); 


System.out.println(driver.findElement(By.id("LED/Building_anchor")).getText()); 

他の例は次のようになります。私はJavascriptExecutorここで指定したサイトで

を同じしようとしている

+0

あなたはサイトのURLを共有できますか? –

+0

申し訳ありませんが、まだ生きているわけではありませんが、https://www.jstree.com/demo/を見ていたら、私は基本的にJavaセレンテストのLEDの下にあるビルディングノードに行きます。ページを開くと、Buildingへの参照はありませんが、LEDノードを開くとhtmlがレンダリングされます)。実際にはこれを質問の注記としても追加します。 – gringogordo

答えて

0

は、私は、コードの下にしようとしている要素

へのクリックのために働いていますLED> Building> TestのTestをクリックしてください。

次に、

JavascriptExecutor js = (JavascriptExecutor) driver; 

// To click on expand menu of LED 
js.executeScript("arguments[0].click();",driver.findElement(By.xpath(".//*[@id='LED']/i"))); 

// To click on expand menu of Building  
js.executeScript("arguments[0].click();",driver.findElement(By.xpath(".//*[@id='LED/Building']/i"))); 

// To click on TestFile under building  
js.executeScript("arguments[0].click();",driver.findElement(By.id("LED/Building/Test_anchor"))); 

アプリケーションでこれを試すことができます。なにか教えてください

+1

ありがとうございます。おそらくJavascriptExecutorをもう少し見てみるべきです!本当に便利です。 – gringogordo

関連する問題