我正在尝试导航到返回#
的URL中包含Error: Navigation Timeout Exceeded: 30000ms exceeded
的URL
it('should go to new link', async function(){
await page.goto('https://example.com/#/abc', {waitUntil: 'networkidle2'})
await page.waitForNavigation()
await page.waitFor(15000);
})
原始代码需要指向值为#/abc
的标签的路径
await page.waitForSelector('a tag selector')
await page.click('a tag selector')
await page.waitForNavigation()
await page.waitFor(5000);
await page.screenshot({ path: 'abc.png' })
使用命令mocha --timeout 75000
package.json
"devDependencies": {
"chai": "^4.1.2",
"karma": "^2.0.3",
"karma-chai": "^0.1.0",
"karma-chrome-launcher": "^2.2.0",
"karma-mocha": "^1.3.0",
"karma-requirejs": "^1.1.0",
"mocha": "^5.2.0"
},
"dependencies": {
"puppeteer": "^0.12.0",
"requirejs": "^2.3.5"
}
将代码更新为
await page.goto('https://example.com/#/abc', {waitUntil: 'load'})
await page.waitForSelector('selector on desired page');
await page.waitFor(5000);
await page.screenshot({ path: 'abc.png' })
并添加了headless: false
,我可以看到它确实进入页面等待了一段时间,但仍然抛出错误Error: Navigation Timeout Exceeded: 30000ms exceeded
答案 0 :(得分:1)
goto
自动等待导航。您的waitForNavigation
希望它再次发出导航请求。您也无需等待25秒即可完成此操作。
但是对于此类ajax站点IMO,您应该等待某些选择器仅在页面完全加载后才加载。
您还可以传递一个timeout参数来增加超时,看看是否可行。
以下内容就足够了。
it('should go to new link', async function(){
await page.goto('https://example.com/#/abc', {waitUntil: 'networkidle2', timeout: 60000 })
await page.waitFor('#SomeSelectorThatWeWaitFor')
})
调试此问题的最佳方法是仔细查看目标页面的行为。