我正在尝试使用jstree为带有jsp页面的Java应用程序编写一些selenium测试。虽然我有很多基本测试要遵循,但我没有做太多。
本质上,id是自动生成的,因此我使用xpath来定位特定的兴趣点。在页面上,我希望选择的叶子是隐藏的(因此无法进行测试)。因此,我的单元测试中的第一个任务是扩展特定链接,因此子节点被渲染并可用于我的实际测试。似乎是关键的元素是i标签。
为清晰起见编辑
如果你看一下https://www.jstree.com/demo/我本质上是想在java selenium测试中到达LED下的Building节点(所以如果你在打开页面时查看源代码,那么就没有对Building的引用,但是当你打开LED节点时,会呈现html)。我希望这有道理吗?!
<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>
使用Chrome开发者工具告诉我
<i class="jstree-icon jstree-ocl" role="presentation"></i>
是您需要单击以展开子节点的元素。
这设置
aria-expanded="true"
和
class="jstree-node jstree-open"
所以我使用了两种方法
1)如果我尝试
driverWait.until(ExpectedConditions.elementToBeClickable(
By.xpath("//aside/div/div/ul/li[@id=’knownId] ']/ul/li[contains(@id,'M')]/i"))).click();
我收到错误
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");
但是在这种情况下,树叶不会展开(尽管如果我做了element.getAttribute(“aria-expanded”);之后例如属性已经更新,它似乎在被测试的页面上什么都不做)和所以我无法选择我想要测试的子项目。
有人能指出我正确的方向吗?
答案 0 :(得分:0)
我在给定的网站上尝试了相同的
此处JavascriptExecutor
正在点击元素
我试过下面的代码:
// 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());
如果您想点击LED&gt;下的Test
,可以使用其他示例。构建&gt;测试
然后你可以试试
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")));
您可以在应用程序中尝试这样做。如果有任何事情请告诉我