Nightwatch ERROR: Unable to locate element: using: css selector
Nightwatch ERROR: Unable to locate element: using: css selector
我是守夜人和 javascript 的新手,在我的一生中,我被困在一些奇怪的地方。我正在尝试做一个简单的测试,一次只单击三个不同的选项卡菜单项。当我 运行 代码时,我得到一个 ERROR: Unable to locate element: "@Performing_AF" using: css selector.
如果我继续使用 css 选择器直接反对使用代码工作的元素。有人可以指导我哪里出错了吗?
我正在测试的URL是:https://www.nypl.org/
这里是/pages/homepage.js
var elements = {
searchbutton: '.nyplHomepageApp button[name = "Search Button"]',
Authortalksconversations: '.titleTabs #tab-0',
Exibitions: '.titleTabs #tab-1',
Performing_AF: '.titleTabs #tab-2',
Other_Events: '.titleTabs #tab-3',
DonateButton: '#donateButton',
Shop: '#shopTopLink',
loadicon: '.dcom-loader',
searchboxbutton: 'button[type="submit"]',
inputsearch: '.desktopSearch-form-inputBox #desktopSearch-form-searchInput'
};
var quicksearch = {
go: function()
{
this
.waitForElementVisible('body', 6000)
.api.pause(2000)
.click('@Exibitions')
.pause(2000)
.click('@Other_Events')
.pause(2000)
.click('@Performing_AF')
}
};
module.exports = {
elements,
commands: [quicksearch]
};
这里是 tests/homepagetest.js
module.exports = {
'Q': function(browser) {
var goto = browser.page.homepage();
goto.go;
//browser.end();
}
}
这对我来说很好用
ul.titleTabs > li#tab-2
您的 css 选择器也适合我。您遇到的错误是什么?
正如我在上面的评论中提到的,如果您从测试中删除所有暂停,它将起作用。我不确定这背后的原因。最好尽可能使用 waitForElementVisible
或 waitForElementPresent
。 pause()
会使您的测试不稳定且不可靠。
您使用这些的方式是
- 单击选项卡
- 等待该选项卡上的某些元素可见/出现
- 单击下一个选项卡并重复
如果您真的想保持暂停,您可以通过在 go
函数的顶部添加一些变量并使用这些变量而不是 @someElement
语法来让它工作。
go: function() {
var exibitions = this.elements.Exibitions.selector;
var otherEvents = this.elements.Other_Events.selector;
var performingAf = this.elements.Performing_AF.selector;
this
.waitForElementVisible('body', 6000)
.api.pause(2000)
.click(exibitions)
.pause(2000)
.click(otherEvents)
.pause(2000)
.click(performingAf)
}
我是守夜人和 javascript 的新手,在我的一生中,我被困在一些奇怪的地方。我正在尝试做一个简单的测试,一次只单击三个不同的选项卡菜单项。当我 运行 代码时,我得到一个 ERROR: Unable to locate element: "@Performing_AF" using: css selector.
如果我继续使用 css 选择器直接反对使用代码工作的元素。有人可以指导我哪里出错了吗?
我正在测试的URL是:https://www.nypl.org/
这里是/pages/homepage.js
var elements = {
searchbutton: '.nyplHomepageApp button[name = "Search Button"]',
Authortalksconversations: '.titleTabs #tab-0',
Exibitions: '.titleTabs #tab-1',
Performing_AF: '.titleTabs #tab-2',
Other_Events: '.titleTabs #tab-3',
DonateButton: '#donateButton',
Shop: '#shopTopLink',
loadicon: '.dcom-loader',
searchboxbutton: 'button[type="submit"]',
inputsearch: '.desktopSearch-form-inputBox #desktopSearch-form-searchInput'
};
var quicksearch = {
go: function()
{
this
.waitForElementVisible('body', 6000)
.api.pause(2000)
.click('@Exibitions')
.pause(2000)
.click('@Other_Events')
.pause(2000)
.click('@Performing_AF')
}
};
module.exports = {
elements,
commands: [quicksearch]
};
这里是 tests/homepagetest.js
module.exports = {
'Q': function(browser) {
var goto = browser.page.homepage();
goto.go;
//browser.end();
}
}
这对我来说很好用
ul.titleTabs > li#tab-2
您的 css 选择器也适合我。您遇到的错误是什么?
正如我在上面的评论中提到的,如果您从测试中删除所有暂停,它将起作用。我不确定这背后的原因。最好尽可能使用 waitForElementVisible
或 waitForElementPresent
。 pause()
会使您的测试不稳定且不可靠。
您使用这些的方式是
- 单击选项卡
- 等待该选项卡上的某些元素可见/出现
- 单击下一个选项卡并重复
如果您真的想保持暂停,您可以通过在 go
函数的顶部添加一些变量并使用这些变量而不是 @someElement
语法来让它工作。
go: function() {
var exibitions = this.elements.Exibitions.selector;
var otherEvents = this.elements.Other_Events.selector;
var performingAf = this.elements.Performing_AF.selector;
this
.waitForElementVisible('body', 6000)
.api.pause(2000)
.click(exibitions)
.pause(2000)
.click(otherEvents)
.pause(2000)
.click(performingAf)
}