当我在页面对象中定义部分时,我无法使 .navigate() 工作
I can't make .navigate() work when I define sections in my page object
使用 Nightwatch 我创建了一个看起来很像这样的页面对象
module.exports = {
url() {
return `${this.api.launchUrl}/mypage`;
},
sections: {
main: {
selector: '.foo',
elements: {
bar: '[name="baz"]',
},
},
},
};
在我测试的 before()
函数中,我这样调用它
module.exports = {
before(browser) {
const page = browser.page.buy.myPageObject();
page.navigate();
page.sections.main.waitForElementVisible('@bar');
},
(...)
};
迎接我的是完全的沉默。没有错误记录,没有浏览器 window 打开,一段时间后进程静默退出。
现在,如果我将页面对象更改为不使用部分:
module.exports = {
url() {
return `${this.api.launchUrl}/mypage`;
},
//sections: {
// main: {
// selector: '.foo',
elements: {
bar: '[name="baz"]',
},
// },
//},
};
并将测试中的相应行更改为 page.waitForElementVisible('@bar');
我的测试运行正常。
除了 docs 中的 sections
之外,我找不到任何关于我不能使用 url()
的提及所以我的问题是:我在这里遗漏了一些明显的东西吗?这是我不该做的事吗?
如果我做错了什么,我至少会收到某种错误消息。周边代码没有语法错误,被eslint解析成功
进一步挖掘表明实际问题是无法在部分上使用命令。
在 github.
上有一个标记为增强的未解决问题
长话短说,解决方法是
const selector = page.section.main.selector;
page.waitForElementVisible(selector);
现在这不是 "feature-equivalent",因为它只是等待该部分出现,但这没关系,测试可以检查输入是否确实存在。之前等待的重点是无论如何都要等待页面渲染。
使用 Nightwatch 我创建了一个看起来很像这样的页面对象
module.exports = {
url() {
return `${this.api.launchUrl}/mypage`;
},
sections: {
main: {
selector: '.foo',
elements: {
bar: '[name="baz"]',
},
},
},
};
在我测试的 before()
函数中,我这样调用它
module.exports = {
before(browser) {
const page = browser.page.buy.myPageObject();
page.navigate();
page.sections.main.waitForElementVisible('@bar');
},
(...)
};
迎接我的是完全的沉默。没有错误记录,没有浏览器 window 打开,一段时间后进程静默退出。
现在,如果我将页面对象更改为不使用部分:
module.exports = {
url() {
return `${this.api.launchUrl}/mypage`;
},
//sections: {
// main: {
// selector: '.foo',
elements: {
bar: '[name="baz"]',
},
// },
//},
};
并将测试中的相应行更改为 page.waitForElementVisible('@bar');
我的测试运行正常。
除了 docs 中的 sections
之外,我找不到任何关于我不能使用 url()
的提及所以我的问题是:我在这里遗漏了一些明显的东西吗?这是我不该做的事吗?
如果我做错了什么,我至少会收到某种错误消息。周边代码没有语法错误,被eslint解析成功
进一步挖掘表明实际问题是无法在部分上使用命令。
在 github.
上有一个标记为增强的未解决问题长话短说,解决方法是
const selector = page.section.main.selector;
page.waitForElementVisible(selector);
现在这不是 "feature-equivalent",因为它只是等待该部分出现,但这没关系,测试可以检查输入是否确实存在。之前等待的重点是无论如何都要等待页面渲染。