【问题标题】:Selenium XPATH preceding-sibling not workingSelenium XPATH 前同级不起作用
【发布时间】:2018-05-16 02:49:51
【问题描述】:
<div class=”ag-cell-label-container ag-header-cell-sorted-none” role=”presentation”
  <span ref=”eMENU” class=”ag-header-icon ag-header-cell-menu-button” aria-hidden=”true” style=”transition:opacity 0.2s;>
    <span class=”ag-icon ag-icon-menu”></span>
  </span>
  <div ref=”eLabel” class=”ag-header-cell-label” role=”presentation”>
    <span ref=”eText” class=”ag-header-cell-text role=”columnheader”> Product</span>

我需要在我的应用程序中单击ag-icon ag-icon menu 以获得产品列。 我写了下面的 xpath 来做同样的事情。但是有超过 1 个元素与兄弟中给出的 xpath 匹配,这就是我将出现硬编码为 [1] 的原因。有没有办法在不使用参考的情况下点击ag-icon ag-icon menu

WebElement pipeline = driver.findElement(By.xpath("//span[text()='Product']"));
WebElement parent = pipeline.findElement(By.xpath(".."));
WebElement sibling = parent.findElement(By.xpath("(//preceding-sibling::span[@class='g-header-icon ag-header-cell-menu-button']/span)[1]"));
sibling.click();

【问题讨论】:

  • 你想选择什么
  • 第一类是ag-header-icon,而不是g-header-icon。你错过了a
  • 目前还不清楚要点击哪个元素。
  • 路径//preceding-sibling::span 是毫无意义的——它会选择文档中的每个span,它是某个东西的前一个兄弟。我怀疑前面的“//”是作为魔法仙尘添加的,应该去掉。
  • 你需要提供一些匹配的节点才能得到好的答案。

标签: java selenium selenium-webdriver xpath


【解决方案1】:
// Option 1
String xpath = "//div[div/span[@role='columnheader' and text()='Product']" + 
"//span[contains(@class, 'ag-icon-menu')]"

driver.findElement(By.xpath(xpath)).click();


// Option 2
String xpath = "//div[div/span[@role='columnheader' and text()='Product']"
driver.findElement(By.xpath(xpath))
      .findElement(By.cssSelector("span.ag-icon-menu"))
      .click()

【讨论】:

    【解决方案2】:

    请尝试使用下面的 xpath,它会起作用

    driver.findElement(By.xpath("//span[contains(@class,'ag-icon') and contains(@class,'ag-icon-menu')]")).click();
    

    当类属性有多个唯一值时,可以使用“AND”条件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多