场景:使用webdriver开展
自动化测试时,从树中取值是经常遇到的场景,比如栏目树。
思路:若class contains"x-tree-node-leaf",说明是叶节点,直接点击;
若 class contains "x-tree-node-collapsed",说明未展开,双击操作;
若class contains"x-tree-node-expand",则已展开,无需操作;
脚本:(JAVA 语言实现)
public static void DMTree(WebDriver dr,ArrayList<String>menus,String xpath){
WebElement doc_treeview=dr.findElement(By.xpath(xpath));
for (String menu:menus){
WebElement doc_div=doc_treeview.findElement(By.xpath(".//span[text()
='"+menu+"']/ancestor:div[1]"));
//判断是不是叶子节点
if(doc_div.getAttribute("class").contains("x-tree-node-leaf")){
doc_div.click();
// System.out.println("叶子节点");
return;
}
else{
//判断是否展开
if(doc_div.getAttribute("class").contains("x-tree-node-collapsed")){
// System.out.println("节点未展开");
//调用双击操作
CommonActions.doubleClick(dr,doc_div);
}
else{
System.out.println("节点已展开");
}
}
}
}
补充:最近发现,上面的这个方法中,树中的元素可以直接找到,而不需要找到根节点,再通过根节点再找其树中元素。故这里补充一个“去掉根节点参数”的方法。
脚本如下:
public static void DMTree(WebDriver dr,ArrayList<String>menus){
for (final String menu:menus){
WebDriverWait wait=new WebDriverWait(getDriver(),60)
WebDriver doc_div=wait.until(new ExpectedCondition<WebELement>(){
public WebElement apply(WebDriver d) {
return d.findElement(By.xpath());}});
//判断是不是叶节点
if (doc_div.getAttribute("class").contains("x-tree-node-leaf")){
doc_div.click();
return; }
//判断是否展开
else if(doc_div.getAttribute("class").contains("x-tree-node-collapsed"))
CommonActions.doubleClick(dr,doc_div);
else;
}
}