【问题标题】:Get attribute value based on condition from other attribute in xpath element根据 xpath 元素中其他属性的条件获取属性值
【发布时间】:2020-04-22 17:26:21
【问题描述】:

我正在尝试在我的 JAVA 代码中列出所有禁用的作业名称。我试图创建一个 xpath 来列出这些,但我只能列出 Never 值。
我的代码列出了 5 个 Never 值。我有 5 个禁用的工作,但我想显示这些工作的名称。

JAVA 代码:

List<WebElement> jobList = driver.
    findElements(By.xpath(
        "//*[contains(@class,'sectionhead expandComponentHolder')]//*[contains(@class,'scheduletime disabled')] "
    )
);

Iterator<WebElement> itr = jobList.iterator();
while(itr.hasNext()) {
    WebElement row = itr.next();
    System.out.println(row.getText());
}

XML:

<tr class = "testclass" >
   <td class = "jobname" data-job-id="jobidtest" data-job-name="jobname" data-job-group="jobgroup"></td>
   <td class = "scheduletime">
       <span class = "scheduletime disabled" title data-toogle="tooltip" data-placemenet="auto left" data-original-title="Job schedule is disabled">
          <i class ="glyphicon-time">…</i>
          <span class = "detail">Never</span>
       </span>
    </td> 
</tr>

【问题讨论】:

  • 给定你的 xml,你想要的输出到底是什么?
  • 所以,我有多个 标签,其中包含一个作业名和一个调度时间。我想列出所有被禁用的作业(第二个 标记包含 Never text 或 scheduletime disabled class )的作业名(来自第一个 标记的 data-job-name 的值)。希望这是清楚的。谢谢。
  • " 所有被禁用的作业(第二个 标记包含 Never text 或 scheduletime disabled class )" - 这两个总是在一起,或者class = "scheduletime disabled"后面不会跟Never 文字?
  • 这两个人总是在一起。所有被禁用的作业都在其名称旁边标有从不文本。
  • 好的,那么;请参阅下面的答案。

标签: java xpath automation


【解决方案1】:

尝试在您的 xml 中使用以下 xpath 表达式,看看它是否有效:

//*[contains(@class,'sectionhead expandComponentHolder')]//span[contains(@class,'scheduletime disabled')]/../preceding-sibling::td

上面的 xml 中的表达式本身应该输出:

职位名称

【讨论】:

  • 谢谢杰克。 xpath 表达式将返回禁用作业的作业名。但是,在运行java代码时,出现以下错误: invalid selector: The result of the xpath expression "//*[contains(@class,'sectionhead expandComponentHolder')]//span[contains(@class,'scheduletime disabled')]/../preceding-sibling::td/@data-job-name" 是:[对象属性]。它应该是一个元素。
  • Java Block 代码是这样的: List jobList = driver.findElements(By.xpath("//[contains(@class,'sectionhead expandComponentHolder')]//span[contains (@class,'scheduletime disabled')]/../preceding-sibling::td/@data-job-name"));迭代器 itr = jobList.iterator(); while(itr.hasNext()) { WebElement row = itr.next(); System.out.println(row.getText()); }
  • @MihaelaIlie - 我明白了;尝试删除该属性;请参阅上面的编辑表达式。您可能需要修改您的 java 代码以查找属性名称 (data-job-name) 而不是该 td 的文本。
  • @MihaelaIlie - 很高兴它对你有用!如果你完成了,请接受答案。
猜你喜欢
相关资源
最近更新 更多
热门标签