在Nightwatch代码库中,我们使用页面对象模式。
我正在尝试创建一个selectFromDropdown
函数以在我们的整个检查中使用,因此我认为将其放置在customCommands文件夹中是很有意义的。
现在,当我去使用页面js文件中的selectFromDropdown
函数时,代码如下所示:
selectFromDropdown('@minMonthlyPrice', min, client)
任何熟悉Nightwatch的人都会认识到@位引用了元素。
所以……最后我要面对的问题-似乎我无法成功通过此@样式选择器。我在执行此操作时看到此错误...
运行.locateMultipleElements()协议操作时出错:无效的选择器:指定了无效或非法的选择器
但是,当我将CSS选择器路径直接传递到selectFromDropdown函数时,一切正常。
有人能找到解决这个问题的方法吗?可以在客户命令中使用@选择器吗?
我尝试按照以下方式将导出函数重写为类:https://nightwatchjs.org/guide/extending-nightwatch/#writing-custom-commands 但是,这似乎没有什么不同。我正在经历与前面提到的相同的行为。
非常感谢您的帮助!
编辑-19/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, ''))
}
答案 0 :(得分:0)
要首先回答您的最后一个问题,绝对可以在自定义命令中使用@选择器。
我需要更多地查看您的selectFromDropdown
命令或如何调用它,但是我怀疑您是在浏览器客户端对象上调用该自定义命令(例如{{1} }),而不是页面对象(例如browser.selectFromDropdown('@minMonthlyPrice', min, client)
)上。您必须在“知道”元素browser.page.somePage().selectFromDropdown('@minMonthlyPrice', min, client)
所指的对象上调用自定义命令。