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
ここで指定したサイトで
を同じしようとしている
あなたはサイトのURLを共有できますか? –
申し訳ありませんが、まだ生きているわけではありませんが、https://www.jstree.com/demo/を見ていたら、私は基本的にJavaセレンテストのLEDの下にあるビルディングノードに行きます。ページを開くと、Buildingへの参照はありませんが、LEDノードを開くとhtmlがレンダリングされます)。実際にはこれを質問の注記としても追加します。 – gringogordo