XPath 当然可以用于在 Tosca 中识别 HTML Web UI 的元素。
由于问题最初是发布的,“忘记密码?” https://www.freecrm.com/index.html上的链接似乎已更改,因此其文本现在为“忘记密码?” 并且实际上位于https://ui.freecrm.com/。为了解释这种变化,这个答案使用“(//*[text()='Forgot your password?'])[1]”而不是原始帖子中提供的表达式。
通过文本修改,表达式可以在将 XScan 中的元素用双引号括起来后识别它:
"(//*[text()='Forgot your password?'])[1]"
在 Tosca 中使用 XPath 时要记住的一些事项:
- 似乎 XPath 表达式需要用双引号 (") 括起来,以便 XScan 知道何时开始评估 XPath 而不是使用其正常规则。仔细观察 XScan 启动时预生成的表达式,我们看到它被包裹在双引号:
"id('ui')/div[1]/div[1]/div[1]/a[1]"
有效的 XPath 表达式不一定保证唯一性,因此注意 XScan 底部的任何反馈消息是有帮助的。“未找到所选元素”和“所选元素不是唯一的”之间存在显着差异。前者只是表示 XScan 找不到匹配项,后者表示 XScan 匹配成功,但无法唯一标识元素。
我的经验是,它有助于明确识别元素以减少歧义的可能性。如果想法是针对锚元素以便测试单击链接,则将范围从任何元素(即“(//* [text()='忘记密码?'])[1]”缩小为仅匹配带有该文本“//a[text()='忘记密码?']”的锚元素。
一般来说,Tricentis(或至少与我交谈过的培训师)建议使用 XPath 以外的方法来识别目标(如果可用)。也就是说,根据我的经验,我使用 XPath 比使用“按锚识别”更幸运。
- XPath 表达式在 XModuleAttribute 属性中可见且可编辑,无需重新扫描。就个人而言,我发现它比使用根据锚点识别时生成的 RelativeId 属性的 XML 值更容易使用。
- 使用 Anchor,我遇到了在切换到另一个浏览器(特别是从 IE 到 Chrome)时无法再找到在一个浏览器中扫描的 XModuleAttributes 的问题。使用 XPath,我没有遇到这些问题。
虽然 XPath 可以很好地识别一个元素的属性和另一个元素的属性,因为它可以识别它们之间的关系(在 Angular 应用程序中非常常见),但通常可以通过使用TBox API调整引擎层来实现相同的目的(即构建自定义控件)。这需要开发人员资源预先进行一些初步工作,但它可以显着改进测试控制这些控件的方式,同时减少自动化专家对 XPath 的依赖。