Automated tests Nightwatch-在页面对象模式中使用带有变量的自定义命令

Automated tests Nightwatch-在页面对象模式中使用带有变量的自定义命令,automated-tests,e2e-testing,nightwatch.js,nightwatch,Automated Tests,E2e Testing,Nightwatch.js,Nightwatch,在我们的Nightwatch代码库中,我们使用页面对象模式 我正在尝试创建一个selectFromDropdown函数,以便在整个检查过程中使用,因此我认为将其放在customCommands文件夹中是有意义的 现在,当我在页面js文件中使用我的selectFromDropdown函数时,代码如下所示: selectFromDropdown('@minMonthlyPrice', min, client) export function selectFromDropdown(cssSelect

在我们的Nightwatch代码库中,我们使用页面对象模式

我正在尝试创建一个
selectFromDropdown
函数,以便在整个检查过程中使用,因此我认为将其放在customCommands文件夹中是有意义的

现在,当我在页面js文件中使用我的
selectFromDropdown
函数时,代码如下所示:

selectFromDropdown('@minMonthlyPrice', min, client)
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, ''))
 }
任何熟悉夜表的人都会认识到@bit引用了一个元素

所以……最后,我面临的问题是——似乎我无法成功地通过这个@style选择器。当我看到这个错误时

运行时出错。locateMultipleElements()协议操作:无效选择器:指定的选择器无效或非法

但是,当我将css选择器路径直接传递到selectFromDropdown函数时,一切都正常

有人想出了克服这个问题的办法吗?是否可以将@selector与客户命令一起使用

我已尝试将导出函数重写为类,如下所示: 然而,这似乎没有什么不同。我经历了与前面提到的相同的行为

非常感谢您的帮助

编辑日期:19年10月3日

自定义命令SelectFromDropdown正在导入到我要使用SelectFromDropdown功能的页面文件中。在这个页面文件中,我还声明了@selector的css路径

import { SelectFromDropdown } from'../../customCommands/selectFromDropdown
我的selectFromDropdown js.file中的代码如下所示:

selectFromDropdown('@minMonthlyPrice', min, client)
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, ''))
 }

首先回答最后一个问题,可以将@selector与自定义命令一起使用


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

感谢您的回复,我添加了一些代码以帮助澄清。@HannahHaken您可以包括如何调用
selectFromDropdown
方法以及错误发生在哪一行吗?