空手道 UI 自动化,是否可以使定位器动态化
Karate UI automation, is it possible to make locators dynamic
感谢 Peter API,Perf 空手道框架。
现在我正在尝试 UI 自动化,它现在看起来很完美。
我有以下问题:
我有一个菜单栏,里面有 15 个项目。它们的名称如下:
-Home
-Account
-groups
-settings
etc etc.
每个人的定位器都是这样的 "a[name=Home]" , "a[name=Account]", "a[name=groups]" 。所以只有 name= 之后的部分本质上是动态的。所以我的问题是,是否有可能以某种方式制作此动态定位器?
我写了一个称为功能的功能,其中我写了登录步骤和 select 一个菜单项。我想通过 json 中的调用功能传递菜单项,如下所示:
如果我想点击帐户菜单
* call read(menuItem.feature) {menuItem: Account}
menuItem.feature 如下所示:
Given url 'xyz'
And input (username, userID)
And input (password, password)
And click("button[name=login]")
And click("a[name=Home]")
这里我想在 menuItem.feature 的最后点击步骤中将主页设置为动态,这样我就可以传递其他菜单项并重复使用上面的所有 steps/feature 文件,每次使用从中传递的不同菜单项登录在 json{.
同样,它只是一个查询。我目前已经编写了多个场景来单击菜单项,然后在调用功能时我用@Home、@account 等标签调用被调用的功能,这工作得很好。
此外,如果有任何其他更好的方法可以实现此目的,请提出建议
是的。这么说吧,你看到的input('foo', 'bar')
之类的东西背后都是纯JS。所以正常的 programming-language 规则适用。例如:
* def dynamic = 'foo'
* def locator = 'a[name=' + dynamic + ']'
* input(locator, 'some value')
感谢 Peter API,Perf 空手道框架。 现在我正在尝试 UI 自动化,它现在看起来很完美。 我有以下问题: 我有一个菜单栏,里面有 15 个项目。它们的名称如下:
-Home
-Account
-groups
-settings
etc etc.
每个人的定位器都是这样的 "a[name=Home]" , "a[name=Account]", "a[name=groups]" 。所以只有 name= 之后的部分本质上是动态的。所以我的问题是,是否有可能以某种方式制作此动态定位器?
我写了一个称为功能的功能,其中我写了登录步骤和 select 一个菜单项。我想通过 json 中的调用功能传递菜单项,如下所示: 如果我想点击帐户菜单
* call read(menuItem.feature) {menuItem: Account}
menuItem.feature 如下所示:
Given url 'xyz'
And input (username, userID)
And input (password, password)
And click("button[name=login]")
And click("a[name=Home]")
这里我想在 menuItem.feature 的最后点击步骤中将主页设置为动态,这样我就可以传递其他菜单项并重复使用上面的所有 steps/feature 文件,每次使用从中传递的不同菜单项登录在 json{. 同样,它只是一个查询。我目前已经编写了多个场景来单击菜单项,然后在调用功能时我用@Home、@account 等标签调用被调用的功能,这工作得很好。
此外,如果有任何其他更好的方法可以实现此目的,请提出建议
是的。这么说吧,你看到的input('foo', 'bar')
之类的东西背后都是纯JS。所以正常的 programming-language 规则适用。例如:
* def dynamic = 'foo'
* def locator = 'a[name=' + dynamic + ']'
* input(locator, 'some value')