我正在使用puppeteer进行UI自动化以及Jest作为测试运行。我可以顺序运行测试但是在并行运行测试时我遇到了问题。 我的页面启动
beforeEach(async () => {
browser = await puppeteer.launch({
headless: false,
//slowMo: 80,
args: [`--window-size=${width},${height}`]
});
page = await browser.newPage();
await page.setViewport({width, height});
});
// and my tests are
test.concurrent("description", async () => {
await page.goto('xxxx.com');
//test code goes here
}, timeout)
test.concurrent("description ", async () => {
//test code goes here
}, timeout)
我收到了以下错误,
TypeError: Cannot read property 'goto' of undefined
(node:9552) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'addExpectationResult' of undefined
(node:9552) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3)
(node:9552) [DEP0018] DeprecationWarning: Unhandled promise rejections are depre cated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
npm ERR! Test failed. See above for more details.
在这方面的任何帮助将不胜感激。 问候, 杰
答案 0 :(得分:0)
您正面临这个问题,因为当您使用箭头函数时,页面变量只是作用于beforeEach块。该块不会将其定义的变量传递给测试或描述块。我通过为测试设置了一个全局变量来解决这个问题,并且我已经在测试设置中使用global.PAGE = await browser.newPage()
将页面对象添加到了它。所以在它自己运行测试之前。
要检查是否是这种情况,您只需在test.concurrent()块中尝试console.log(page);
。
查看官方的开玩笑文档。他们已经开始使用jest和puperteer了。
希望这会有所帮助。 欢呼声。
答案 1 :(得分:0)
有几种并行运行测试的方式,据我所知,您可以使用新的浏览器实例运行每个测试套件。
beforeAll
函数中创建新的浏览器实例
运行测试,然后在afterEach
函数中关闭浏览器实例。简单测试套件示例:
const browser;
beforeEach(async () => {
browser = await puppeteer.launch({}); //spinning up new browser instance
page = await browser.newPage()
await page.goto('URL')
});
test('test whatever', async () => {});
test('test whatever2', async () => {});
afterEach(async() => {
await browser.close() //closes browser
});
但是您必须修改PuppeteerEnvironment
类,例如,以这种方式进行
async setup() {
await super.setup();
this.global.__BROWSER__ = await puppeteer.launch({});
}
不同的想法取决于您要自动化的确切内容以及流程的结构,但是请记住,每次测试都应尽可能地独立于其他测试。
我希望这会对您有所帮助。