当其他节点之间存在空节点时,如何构建xpath表达式?

时间:2013-06-26 14:28:41

标签: xpath selenium-webdriver

以下是我正在测试的网页的快照:

<div class="menubox1">
  <table class="menubox1box1">
    <tbody>
      <tr class="menubox2">
        <td class="menubox22">
          <table class="menubox221">
            <tbody>
              <tr>
                <td class="menubox2211" id="tdMenuBar">
                  <table id="tblMenuBar">
                    <tbody>
                      <tr id="mytr">
                      <>
                      <div id="divMenu">

我必须使用xpath访问div,但它上面有一个空节点。我应该如何处理这些空节点?

我试着构建这个: By.xpath( “// * [@类= \” menubox1 \ “] /表/ tbody的/ TR / TD /表/ tbody的// DIV”)

无法识别元素。我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:0)

您当前的XPATH错误。有一个解决方案:

By.xpath("//div[@class='menubox1']/table/tbody/tr/td/table/tbody/tr/td/table/tbody/div")

请尝试以下简单方法,告诉我发生了什么事。

By.xpath("//div[@id='divMenu']")

PS:

您能解释一下您的空节点吗?

就像:

<table id="tblMenuBar">
  <tbody>
    <tr id="mytr">
    <>
    <div id="divMenu">
</table>

<table id="tblMenuBar">
  <tbody>
    <tr id="mytr">
    <>
      <div id="divMenu">
    <>
</table>

答案 1 :(得分:0)

尝试使用以下定位器。

By.cssSelector("#tblMenuBar #divMenu")

or

By.cssSelector("#tdMenuBar > #tblMenuBar #divMenu")

P.S。 :如果某些东西具有动态定位器或不唯一,请尝试根据某个唯一定位器找到该元素。

答案 2 :(得分:0)

e1che的解决方案应该有效,如果你对特定的div感兴趣,比如// div [@ class ='menubox1'],你可以试试这个。这将选择具有特定类属性(menubox1)的div的子div,其id与divMenu匹配。

By.xpath(//div[@class='menubox1']/descendant::div[@id='divMenu'])