Jyo*_*ick 0 javascript headless puppeteer
我正在尝试使用 puppeteer 自动化在 azure 门户上运行的应用程序。输入密码后我收到以下错误,它没有单击提交按钮。
node:55768) UnhandledPromiseRejectionWarning: ReferenceError: browser is not defined
Run Code Online (Sandbox Code Playgroud)
这是我的示例代码:
(async () => {
try {
const launchOptions = { headless: false, args: ['--start-maximized'] };
const browser = await puppeteer.launch(launchOptions);
const page = await browser.newPage();
await page.emulate(iPhonex);
await page.goto('https://apps.testpowerapps.com/play/72ff5b93-2327-404d-9423-92eedb44a287?tenantId=n082027');
//Enter User Name
const [userName] = await page.$x('//*[@id="i0116"]');
await userName.type("jyoti.m@azure.com");
const [loginButton] = await page.$x('//*[@id="idSIButton9"]');
await loginButton.press('Enter');
//Enter Password
const [passWord] = await page.$x('//*[@id="i0118"]');
await passWord.type("Pass123");
const [submitButton] = await page.$x('//*[@id="idSIButton9"]');
await submitButton.press('Enter');
//await page.keyboard.press('Enter');
}
catch(error){
console.error(error);
}
finally {
await browser.close();
}
})();
Run Code Online (Sandbox Code Playgroud)
两种方式都尝试过,但都不起作用,唯一的问题是两个页面的 xpath 是相同的。
const [submitButton] = await page.$x('//*[@id="idSIButton9"]');
await submitButton.press('Enter');
//await page.keyboard.press('Enter');
Run Code Online (Sandbox Code Playgroud)
任何解决此问题的线索。
您可以browser在 中定义该值try,但也可以在 中使用它catch。consts 是块作用域的,因此它们与块绑定在一起,因此不同的块(finally)看不到它。
问题是这样的:
try {
const browser = ...;
}
finally {
// different block!
await browser.close();
}
Run Code Online (Sandbox Code Playgroud)
要解决此问题,请将browser以下内容移出try-catch:
const browser = ...
try {
}
finally {
await browser.close();
}
Run Code Online (Sandbox Code Playgroud)
这样它就可以在finally块中使用。