如何在 JSON(页面对象模型)中正确创建和使用动态 Xpath - 空手道 DSL

How to properly create and use dynamic Xpath in JSON (Page Object Model) - Karate DSL

例如,我在包含特定页面的所有 XPath 的页面文件夹中有这个示例 JSON 对象。

{
    "pageTitle1": "//*[@class='page-title' and text()='text1']",
    "pageTitle2": "//*[@class='page-title' and text()='text2']",
    "pageTitle_x" : "//*[@class='page-title' and text()='%s']"
}

 * def pageHome = read('classpath:/pages/pageHome.json')
 * click(pageHome.pageTitle_x) <-- how to properly replace %s in the string?

更新:我尝试了替换功能,不确定这是否是正确的方法。

* click(pageHome.pageTitle_x.replace("%s","new value"))

首先提一点建议。像这样“太聪明”会导致长期 运行 的可维护性问题。在这里我已经说了很多,请阅读:

也就是说,您可以编写可重复使用的 JS 函数来完成所有这些事情:

* def pageTitle = function(x){ return "//*[@class='page-title' and text()='" + x "']" }

现在使用它你可以做到这一点:

* click(pageTitle('foo'))

如果您重新设计函数,即使这样也是可能的:

* click(pageTitle(pageHome.pageTitle_x, 'foo'))

但是看看事情如何变得更加复杂和可读性降低。这是你的选择。请注意,您在 JS 中可以做的任何事情(例如 String.replace())都是可能的,这取决于您和您的创造力。