我使用Puppeteer和Jest来测试如果按下/
键,#keys
是否变为display: flex
:
import * as puppeteer from 'puppeteer';
import { log } from 'console';
describe('Puppeteer Test', () => {
let browser: puppeteer.Browser;
let page: puppeteer.Page;
beforeAll(async () => {
browser = await puppeteer.launch({
headless: true,
defaultViewport: null,
});
page = await browser.newPage();
await page.goto('http://localhost:5500/dist/dummy.html');
});
test('`#keys` has display: flex after pressing `/`', async () => {
const keysElement = await page.$('#keys');
await page.keyboard.press('/');
expect(window.getComputedStyle(keysElement).display).toBe('flex');
});
afterAll(async () => {
await browser.close();
});
});
我收到此TypeScript错误:
常量键元素:puppeteer.ElementHandle|零
类型为“ElementHandle”的参数|“null”不能赋给类型〉“Element”的参数。类型“null”不能赋给类型“Element”。ts(2345)
我知道它的意思。getComputedStyle()
需要一个Element
,但是keysElement
是一个ElementHandle<Element> | null
。但是我不确定如何将它转换成一个元素。
如果我写window.getComputedStyle(keysElement).display
,我会得到另一个错误:
类型“ElementHandle”的转换|将“null”转换为类型“Element”可能是错误的,因为这两种类型彼此之间的重叠程度都不够。如果是有意的,请先将表达式转换为“unknown "。类型”ElementHandle“缺少类型”Element“的以下属性:属性、类列表、类名、客户端高度以及其他164个.ts(2352)
注意:抱歉,我不知道如何分享实时的Jest + Puppeteer + TypeScript代码。
1条答案
按热度按时间31moq8wy1#
我不确定
window
指的是什么,我会尝试使用evaluate
块来访问浏览器的window
:最小的、可运行的示例: