基于操纵符的基于哈希的导航

时间:2018-06-20 01:22:29

标签: mocha puppeteer

我正在尝试导航到返回#的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

1 个答案:

答案 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')
})

调试此问题的最佳方法是仔细查看目标页面的行为。