首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JS剧作家测试中的语境缺失

JS剧作家测试中的语境缺失
EN

Stack Overflow用户
提问于 2021-08-13 12:50:34
回答 1查看 393关注 0票数 1

我的问题如下。我在页面上有几个链接,我必须遵循这些链接,然后返回到同一个页面。我试着用以下方式做这件事:

代码语言:javascript
运行
复制
const els = await page.$$('div[name="olymp"] a'); // get links on the page
        for (let i = 0; i < els.length; i++) {
            await els[i].click(); // clicking on a link that leads to another page
            await page.waitForLoadState('networkidle');
            await page.click('div.floating:nth-child(1)'); 
            await page.click('div.floating:nth-child(1) div.extra a') // a link on another page that leads to the first page
        }

我在第二次迭代中遇到了错误:elementHandle.click: Protocol error (DOM.describeNode): Cannot find context with specified id可能有人遇到了类似的错误?我正在使用剧作家v1.13

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-13 18:55:53

该问题在循环的第二次迭代中,元素句柄已被释放。在两个剧作家和木偶戏手的资源被转储后,页面提交导航。与其对每个元素句柄进行操作,不如尝试如下所示:

代码语言:javascript
运行
复制
const linksCount = await page.$$eval('div[name="olymp"] a', (links) => links.length);
for (let i = 0; i < linksCount; i += 1) {
    await Promise.all([
        page.$$eval('div[name="olymp"] a', links => links[i].click()),
        page.waitForLoadState('networkidle')
    ]);

    await page.click('div.floating:nth-child(1)');
    await Promise.all([
        page.click('div.floating:nth-child(1) div.extra a'),
        page.waitForLoadState('networkidle')
    ]);
}

注意,如果单击这些链接会导致导航/页面重新加载,则可能希望使用page.waitForNavigation而不是page.waitForLoadState。每当您执行一些触发导航(如单击链接)的操作时,将其与上面的Promise.all包在一起是一种良好的做法,以防止出现争用情况。

来源:

https://playwright.dev/docs/api/class-page#page-wait-for-navigation https://github.com/puppeteer/puppeteer/issues/2258

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68772652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档