如何解决页面对象不返回剧作家中的选择器
describe('When a user views a list of forms',() => {
let rows;
before(async() => {
await page.waitForSelector('tbody');
rows = await page.$$('tr');
});
it('should show a table of forms',async() => {
rows.length.should.equal(11);
});
class UserFormsPage {
constructor(page) {
this.page = page;
}
async rows() {
await this.page.waitForSelector('tbody');
return await this.page.$$('tr');
}
}
这是我的测试:
describe.only('List Forms Widget',function() {
let page;
...
before(async function() {
const context = await this.browser.newContext();
page = await context.newPage();
const userFormsPage = new UserFormsPage(page);
...
describe('When a user views a list of forms',() => {
let rows;
...
before(async() => {
rows = await userFormsPage.rows();
});
it('should show a table of forms',async() => {
rows.length.should.equal(11);
});
但我明白
1) List Forms Widget
When a user views a list of forms
"before all" hook for "should show a table of forms":
TypeError: Cannot read property 'rows' of undefined
这是为什么?
注意:如果重要,请在 Node 16 中使用原生 es 模块
解决方法
您的 rows()
方法是异步的。每个异步方法都会返回一个承诺,因此在您的钩子中,rows = userFormsPage.rows();
只会导致 Promise { <pending> }
。
如果你想要号码,你必须等待它:
before(async () => {
rows = await userFormsPage.rows();
});
另一个问题似乎是您没有(至少在您的问题中没有)任何 UserFormsPage
对象的创建。构造函数需要 page
,但您似乎没有提供它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。