Nightwatch JS 页面对象 returns 未定义
Nightwatch JS page object returns undefined
我正在使用 Nightwatch 和 mocha。
我尝试从页面对象中获取元素的文本。尝试将收到的文本与另一文本进行比较时,我收到错误消息 "AssertionError: expected undefined to equal 'Text'"。
这是页面对象函数:
const Commands = {
getInstanceLabel() {
this.getText('.DropdownSelect__label', (result) => {
return result.value;
});
}
}
这是测试代码:
it('Should sort the collection in ascending order by default', (client) => {
const labelText = client.page.instanceCollectionPage().getInstanceLabel();
expect(labelText).to.equal('Text');
});
为什么显示未定义?
问题是你正在使用箭头函数,并且如 mdn 中所述:
An arrow function expression has a shorter syntax compared to function
expressions and does not bind its own this, arguments, super, or
new.target.
您可以通过两种不同的方式修复它:
使用函数:
例如(你可以使用this)
it('Should launch', function (browser) {
const url = browser.launchUrl;
browser.url(url).waitForElementVisible('body', 1000);
browser.getText('#txtWelcome', function (result) {
this.verify.equal(result.value, 'Welcome');
});
});
使用浏览器:
例如(需要直接访问浏览器对象)
it('Should launch', (browser) => {
const url = browser.launchUrl;
browser.url(url).waitForElementVisible('body', 1000);
browser.getText('#txtWelcome', (result) => {
browser.verify.equal(result.value, 'Welcome');
});
});
这些只是如何使用 this 的示例,我无法提供有关您的问题的更多详细信息,因为您没有显示 InstanceCollection 确实如此。
我正在使用 Nightwatch 和 mocha。
我尝试从页面对象中获取元素的文本。尝试将收到的文本与另一文本进行比较时,我收到错误消息 "AssertionError: expected undefined to equal 'Text'"。
这是页面对象函数:
const Commands = {
getInstanceLabel() {
this.getText('.DropdownSelect__label', (result) => {
return result.value;
});
}
}
这是测试代码:
it('Should sort the collection in ascending order by default', (client) => {
const labelText = client.page.instanceCollectionPage().getInstanceLabel();
expect(labelText).to.equal('Text');
});
为什么显示未定义?
问题是你正在使用箭头函数,并且如 mdn 中所述:
An arrow function expression has a shorter syntax compared to function expressions and does not bind its own this, arguments, super, or new.target.
您可以通过两种不同的方式修复它:
使用函数:
例如(你可以使用this)
it('Should launch', function (browser) {
const url = browser.launchUrl;
browser.url(url).waitForElementVisible('body', 1000);
browser.getText('#txtWelcome', function (result) {
this.verify.equal(result.value, 'Welcome');
});
});
使用浏览器:
例如(需要直接访问浏览器对象)
it('Should launch', (browser) => {
const url = browser.launchUrl;
browser.url(url).waitForElementVisible('body', 1000);
browser.getText('#txtWelcome', (result) => {
browser.verify.equal(result.value, 'Welcome');
});
});
这些只是如何使用 this 的示例,我无法提供有关您的问题的更多详细信息,因为您没有显示 InstanceCollection 确实如此。