Nightwatch-将自定义命令与页面对象模式内的变量一起使用

时间:2019-09-19 14:55:12

标签: automated-tests e2e-testing nightwatch.js nightwatch

在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, ''))
 }

1 个答案:

答案 0 :(得分:0)

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

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