mocha.js - 页面对象不返回 Playwright 中的选择器
问题描述
使用微软的剧作家,我有这个有效的测试代码:
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
,但您似乎没有提供它。
推荐阅读
- javascript - 制作一个程序,输出宽度和高度基于输入数字的线条图案
- c# - 即使 C# 的值为 false,标签也不会隐藏
- haskell - 什么类型对应于类型论中的 xor b?
- node.js - 哪种方法更好?一个请求或两个请求
- python - NET::ERR_CERT_INVALID python 在 macOS 上使用 selenium
- vue.js - 从本地存储和 VueX 中删除项目
- javascript - Multer req.file 使用表单而不是邮递员表单数据未定义
- c# - 如何将一个表数据与另一个表数据匹配然后显示匹配的数据?ASP.NET MVC
- typescript - 只读字段未正确呈现
- excel-formula - 在 Excel 中查找重复项并创建波段