将两个 xpath 合并为一个 xpath

Combining two xpaths into one xpath

提问人:Anne Bailly 提问时间:8/7/2022 更新时间:8/7/2022 访问量:52

问:

是否可以将这两个 Xpath 合并为一个 xpath 查询?

signatureAgreementThumbnailForInProgressApplication = By.XPath("//div[text()='Upload Signature Agreement']/parent::div/parent::div/descendant::div[contains(@style,'background-image: url')]");
signatureAgreementThumbnailForSubmittedApplication = By.XPath("//div[text()='Signature Agreement']/parent::div/descendant::div[contains(@style,'background-image: url')]");

我的自动化测试(项目是 VS/C#/Selenium)需要验证在线应用程序的两种状态的文档缩略图是否存在(但不是内容或其他任何内容):正在进行和已提交。我觉得两个具有不同 xpath 的独立方法是多余的,因为我正在做同样的简单验证。

在浏览了建议使用和/或评估多个属性的 SO 帖子后,我创建了下面的查询,它几乎完美地适用于正在进行的和已提交的缩略图。小问题是,对于 Submitted,在 DOM 中,xpath 命中了两个缩略图元素,一个是我希望它命中的,另一个是另一个。我的测试仍然通过,因为它正在验证缩略图的存在,但我希望对其进行调整,以便它找到特定的缩略图。

signatureAgreementThumbnail = By.XPath("//div[text()='Upload Signature Agreement' or text()='Signature Agreement']/parent::div/parent::div/descendant::div[contains(@style,'background-image: url')]");

我还尝试了以下查询,这些查询根本不起作用:

//div[text()='Upload Signature Agreement' or text()='Signature Agreement'][/parent::div/parent::div/descendant::div or /parent::div/descendant::div][contains(@style,'background-image: url')]
//div[text()='Upload Signature Agreement' or text()='Signature Agreement'][/parent::div/parent::div/descendant::div or /parent::div/descendant::div and contains(@style,'background-image: url')]

我无法提供我正在自动化的站点的 URL,因为它是一个私人站点。

验证 DOM XPath 自动化 DOMXpath

评论

0赞 LMC 8/7/2022
看看这是否有助于 stackoverflow.com/a/73226797/2834978
0赞 Conal Tuohy 8/7/2022
这里真的没有足够的信息来回答你的问题。你能提供一个 HTML 示例吗?至少包含“两个缩略图元素,一个我希望它击中,另一个”的部分?在没有实际数据的情况下,不可能说如何区分这两个缩略图。

答: 暂无答案