【问题标题】:How to frame the xpath expression when there is a null node in between other nodes?当其他节点之间存在空节点时,如何构建 xpath 表达式?
【发布时间】:2013-06-26 14:28:40
【问题描述】:

这是我正在测试的页面的快照:

<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("//*[@class=\"menubox1\"]/table/tbody/tr/td/table/tbody//div")

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

【问题讨论】:

  • XML 是否允许空节点?
  • 我不确定为什么需要它,但它似乎是可能的。以上来自 IBM 的 sterling 应用程序页面。

标签: xpath selenium-webdriver


【解决方案1】:

您当前的 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>

【讨论】:

  • 和第一个一样。具有相同 ID 的 div 很少,所以我不确定您的解决方案是否有效。我明天试试。
【解决方案2】:

试试下面的定位器。

By.cssSelector("#tblMenuBar #divMenu")

or

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

附: :如果某物具有动态定位器或不是唯一的,请尝试相对于某个唯一定位器来定位该元素。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-23
      • 2019-10-27
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多