Я пытаюсь автоматизировать ввод и тестирование некоторых данных в ERP-приложении Oracle Cloud Saas с кукловодом.
Вот шаги и код.Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я выполняю page.click на элементе, я получаю сообщение об ошибке:
(node:58569) UnhandledPromiseRejectionWarning: Error: Evaluation failed: DOMException: Failed to execute 'querySelector' on 'Document': 'a#pt1:commandLink1.xj8.xit' is not a valid selector.
at <anonymous>:1:33
at ExecutionContext.evaluateHandle (/Users/user/node_modules/puppeteer/lib/ExecutionContext.js:88:13)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:160:7)
(node:58569) 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: 1)
(node:58569) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Открыть страницу входа в систему и войти в приложение (Works)
const browser = await puppeteer.launch({headless: false});
let page = await browser.newPage();
await page.goto(config.appurl, {waitUntil: 'networkidle2'});
await page.type('#userid', 'USERNAME', {delay : 10});
await page.type('#password', 'PASSWORD', {delay : 10});
await page.waitForSelector('#btnActive', {enabled : true});
page.click('#btnActive', {delay : 1000}).then(() => console.log('Login Button Clicked'));
URL-адреса журналаon Target Changed (Работает)
browser.on('targetchanged', ()=> {
console.log('Target Changed!');
console.log('URL: ', page.url());
});
Рендеринг, Снимок экрана и Щелкните элемент при загрузке домашней страницы (Рендеринг и Снимок экрана работают должным образом. Я вижу снимок экрана и отображаемый html для домашней страницы после того, как пользователь получилвошли в систему, но щелчки выдают ошибку - недопустимый селектор)
page.on('load',()=> {
console.log('Home Page Loaded!');
console.log(page.url());
page.screenshot({path: 'home.png'});
async function render(page){
let html = await page.content();
await fs.writeFileSync('home.html', html);
}
render(page);
page.click('a#pt1:commandLink1.xj8.xit', {delay : 1000}).then(() => console.log('Link Clicked')); //this is what generates the error
});
Из отображаемого содержимого домашней страницы я вижу нижеприведенный HTML-фрагмент, который я пытаюсь щелкнуть, используя page.click.
<div><a id="pt1:commandLink1" class="xj8 xit" onclick="return false;" href="#">You have a new home page!</a></div>
Другая проблема, которую я вижу при использовании puppeteer и chrome для написания скриптов в Cloud Saas App, заключается в том, что я не могу использовать Inspect Element для всех элементов на странице, не знаю почему.
Как мнеизменить мой сценарий, чтобы я мог щелкнуть ссылку, указанную на этой странице?