0

在我们的 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, ''))
 }
4

1 回答 1

0

要首先回答您的最后一个问题,绝对可以将 @ 选择器与自定义命令一起使用。

我需要查看更多您的selectFromDropdown命令或您如何调用它才能确定,但​​我怀疑您是在浏览器客户端对象(例如browser.selectFromDropdown('@minMonthlyPrice', min, client))而不是页面对象(例如browser.page.somePage().selectFromDropdown('@minMonthlyPrice', min, client))上调用该自定义命令。您必须在“知道”元素@minMonthlyPrice所指的对象上调用自定义命令。

于 2019-10-01T15:26:23.997 回答