Selenium webdriver:排除子节点

时间:2014-02-21 21:18:46

标签: java selenium xpath selenium-webdriver

以下是HTML代码示例:

  <table width="100%" cellspacing="0" cellpadding="0" border="0">
   <tbody>
     <tr>
     <tr class="tinyfont">
     <tr height="2px">
     <tr height="1px">
     <tr height="1px">
     <tr>
     <tr height="2px">
     <tr height="1px">
     <tr height="1px">
     <tr height="2px">
  </tbody>
 </table>

我正在使用selenium webdriver。 我已收到此代码中的所有子元素,但现在我想在逻辑中排除一个特定的子元素,如何从数组中排除其中一个子元素。 我想排除tr [6]子元素..

   List<WebElement> list = driver.findElements(By.xpath("/html/body/table/tbody  //*"));        

 ArrayList<String> al1 = new ArrayList<String>();

for(WebElement ele:list){
 String className = ele.getAttribute("class");
 System.out.println("Class name = "+className);
    al1.add(className);
 } 

先谢谢!!

2 个答案:

答案 0 :(得分:1)

省略第6个表行,然后选择所有后代:

/html/body/table/tbody/tr[position() != 6]//*

或仅选择不在位置1且具有属性的所有表行(然后选择其后代):

/html/body/table/tbody/tr[position() = 1 or @*]//*

或更具体地说,还要检查属性名称:

/html/body/table/tbody/tr[position() = 1 or @height or @class]//*

答案 1 :(得分:0)

您想要避免使用元素6吗?如果是,则使用带有增量的for外观,并使用if语句避免使用元素6.

int numOfElements = driver.findElements(By.xpath("/html/body/table/tbody  //*")).count();

ArrayList<String> al1 = new ArrayList<String>();
for(int i = 1; i<= numOfElements; i++) 
{
   if(i!=6)
   {
       String className = driver.findElement(By.xpath("/html/body/table/tbody/tr["+i+"]")).getAttribute("class");
       System.out.println("Class name = "+className);
       al1.add(className);
   }
}

这听起来不像是你正在寻找的解决方案,但它仍然是实现你想要的方式。除了你有一个包含可以比较或排除的东西的属性之外,我无法想到另一种方式