祖先或自我也选择祖先的兄弟姐妹

时间:2014-02-12 13:27:15

标签: selenium xpath

我在WebDriver中使用ancestor-or-self

我得到的结果不正确,我注意到WebDriver也选择了我祖先的(前面)兄弟。

我该如何避免呢?

修改

代码示例:

<div class="model1">
   <div class="ng-hide" id="1">
   <div id="2">
       <form class="model 3">
           <div class="5">
           <div class="model 6">
           <div class="model 7">
              <div class="9">
                 <button id="try1">
                 <button id="try2">

现在,我做下一个:

List<WebElement> lstElm = driver.findElements(By.xpath("//button[@id="try2"]/ancestor-or-self::*"));

当我遍历lstElm,并搜索是否有一个元素类包含hide时,我看到我的xpath也返回元素<div class="ng-hide" id="1">。但是这个元素是它祖先的前兄弟(而不是它的祖先)

1 个答案:

答案 0 :(得分:0)

与您的想法相反,以<div class="ng-hide" id="1"> 开头的元素是<button id="try2">的祖先。查看您的HTML并注意<div class="ng-hide" id="1">如何开始,但永远不会在任何地方关闭:

<div class="model1">
   <div class="ng-hide" id="1"> <!-- This is not closed!!! -->
   <div id="2">
       <form class="model 3">
           <div class="5">
           <div class="model 6">
           <div class="model 7">
              <div class="9">
                 <button id="try1">
                 <button id="try2">

要获得您期望的结果,您需要以下内容:

<div class="model1">
   <div class="ng-hide" id="1"></div> <!-- The div is closed right away. -->
   <div id="2">
       <form class="model 3">
           <div class="5">
           <div class="model 6">
           <div class="model 7">
              <div class="9">
                 <button id="try1">
                 <button id="try2">

使用此HTML,<div class="ng-hide" id="1">在下一个<div>之前已关闭