在 Nightwatch JS 中使用页面对象
Using pages object in Nightwatch JS
我正在使用守夜人“0.8.6”。根据页面上的文档,我创建了一个 pages/login.js
文件并将目录添加到配置文件中:
module.exports = {
url: function() {
return this.launchUrl;
}
};
文档提到 this.api
,但那不是客户端/浏览器的 属性。 this.launchUrl
显然是可用的,但是。
我更改了现有测试以使用它:
module.exports = {
'Login page has a login button' : function (browser) {
browser
.url(browser.page.login().url())
.waitForElementVisible('body', 10000)
.assert.containsText('button', 'SIGN IN')
.end();
}
}
测试现在失败了。 .url 尝试用 data:,
打开 selenium,而不是 this.launchUrl 的值,即 localhost:3000.
页面对象显然是在登录测试的上下文中评估的,因此页面对象中的 this 应该有 this.launchUrl。深入研究源代码,我发现混合中也有页面包装器对象,不知何故。
如何在 0.8.6 中正确创建和使用页面对象?
我想你可以尝试添加一个 var 来调用 login.js 页面。
像这样:
module.exports = {
'Login page has a login button' : function (browser) {
var LoginPage = browser.page.login();
LoginPage.navigate();
LoginPage
.waitForElementVisible('body', 10000)
.assert.containsText('button', 'SIGN IN')
.end();
}
}
因此根据文档,您必须:
- "Each page object should be located in a separate file, located in a designated folder. Nightwatch reads the page objects from the folder (or folders) specified in the page_objects_path
configuration property."
您是否配置了 page_objects_path
目录?
完成此操作后,您可以在该文件夹中创建一个 js 文件,例如:
module.exports = function(client) {
return {
gotoUrl: function() {
return client
.url(client.launchUrl);
},
};
};
然后您可以像这样编写测试:
module.exports = {
'Login page has a login button': (browser) => {
browser.page.pagescriptname()
.gotoUrl()
.waitForElementVisible('body', 10000)
.assert.containsText('button', 'SIGN IN')
.end();
}
}
确保您已在 nightwatch.js 文件中配置 launch_url
(或者这可以通过 nightwatch.conf.js
文件动态更改(我为我的项目所做的)。
我正在使用守夜人“0.8.6”。根据页面上的文档,我创建了一个 pages/login.js
文件并将目录添加到配置文件中:
module.exports = {
url: function() {
return this.launchUrl;
}
};
文档提到 this.api
,但那不是客户端/浏览器的 属性。 this.launchUrl
显然是可用的,但是。
我更改了现有测试以使用它:
module.exports = {
'Login page has a login button' : function (browser) {
browser
.url(browser.page.login().url())
.waitForElementVisible('body', 10000)
.assert.containsText('button', 'SIGN IN')
.end();
}
}
测试现在失败了。 .url 尝试用 data:,
打开 selenium,而不是 this.launchUrl 的值,即 localhost:3000.
页面对象显然是在登录测试的上下文中评估的,因此页面对象中的 this 应该有 this.launchUrl。深入研究源代码,我发现混合中也有页面包装器对象,不知何故。
如何在 0.8.6 中正确创建和使用页面对象?
我想你可以尝试添加一个 var 来调用 login.js 页面。 像这样:
module.exports = {
'Login page has a login button' : function (browser) {
var LoginPage = browser.page.login();
LoginPage.navigate();
LoginPage
.waitForElementVisible('body', 10000)
.assert.containsText('button', 'SIGN IN')
.end();
}
}
因此根据文档,您必须:
- "Each page object should be located in a separate file, located in a designated folder. Nightwatch reads the page objects from the folder (or folders) specified in the page_objects_path
configuration property."
您是否配置了 page_objects_path
目录?
完成此操作后,您可以在该文件夹中创建一个 js 文件,例如:
module.exports = function(client) {
return {
gotoUrl: function() {
return client
.url(client.launchUrl);
},
};
};
然后您可以像这样编写测试:
module.exports = {
'Login page has a login button': (browser) => {
browser.page.pagescriptname()
.gotoUrl()
.waitForElementVisible('body', 10000)
.assert.containsText('button', 'SIGN IN')
.end();
}
}
确保您已在 nightwatch.js 文件中配置 launch_url
(或者这可以通过 nightwatch.conf.js
文件动态更改(我为我的项目所做的)。