在我们的 Nightwatch 代码库中,我们使用了页面对象模式。
我正在尝试创建一个selectFromDropdown
在我们的检查中使用的函数,所以我认为将它放在 customCommands 文件夹中是有意义的。
现在,当我selectFromDropdown
在页面 js 文件中使用我的函数时,代码如下所示:
selectFromDropdown('@minMonthlyPrice', min, client)
任何熟悉 Nightwatch 的人都会认出 @ 位来引用一个元素。
所以......最后我面临的问题 - 似乎我无法成功通过这个@样式选择器。当我这样做时,我看到了这个错误......
运行 .locateMultipleElements() 协议操作时出错:无效的选择器:指定了无效或非法的选择器
但是,当我将 css 选择器路径直接传递到 selectFromDropdown 函数时,一切正常。
有没有人想出解决这个问题的方法?是否可以将@选择器与客户命令一起使用?
我已经尝试按照这个将我的导出函数重写为一个类:https ://nightwatchjs.org/guide/extending-nightwatch/#writing-custom-commands 但是它似乎没有什么不同。我遇到了与前面提到的相同的行为。
任何帮助深表感谢!
编辑 - 2019 年 3 月 10 日
自定义命令 SelectFromDropdown 正在导入到我要使用 SelectFromDropdown 函数的页面文件中。在此页面文件中,我还声明了 @ 选择器的 css 路径。
import { SelectFromDropdown } from'../../customCommands/selectFromDropdown
我的 selectFromDropdown js.file 中的代码如下所示:
export function selectFromDropdown(cssSelector, value, client) {
client.waitForElementVisible(cssSelector, 10000)
client.click(cssSelector, () => {
client.waitForElementVisible(`option[value="${value}"]`, 10000)
client.click(`option[value="${value}"]`)
})
.assert.value(cssSelector, value.replace(/'/g, ''))
}