首页 > 解决方案 > 使用 Playwright,page.url() 获取的是以前的 url 而不是当前的 url

问题描述

我正在使用expect(page.url()).toContain('/nav');. 浏览代码时,我可以清楚地看到我们在点击后点击了那个 url 字符串。

我尝试将我的代码放入和排除相同错误的承诺:

Expected substring: "/nav"
Received string:    "https://website.com/about"

      283 |     page.waitForNavigation();
      284 |     await page.hover('nav >> text=Nav');
      285 |     await page.click('nav >> text=Nav');
      286 |     console.log(page.url());
    > 287 |     expect(page.url()).toContain('/nav');
          |                        ^
      288 |
      289 |     page.click('text=Next Nav')
      290 |     expect(page.url()).toContain('/nextNav');

链接本身很简单<a href="/nav" class="list__item__link" data-v-0df6efc8>Nav</a>

控制台日志显示https://website.com/about

这是与评论相关的片段:

////##OURSTORY##////
    page.hover('nav >> text=Our Story');
    page.waitForNavigation();
    await page.click('nav >> text=About');
    expect(page.url()).toContain('story');

    //await page.pause();

    await page.hover('nav >> text=Our Story');
    await page.hover('nav >> text=360° Wellness');
    await page.click('nav >> text=360° Wellness'); 
    console.log(page.url());
    await page.waitForNavigation();
    expect(page.url()).toContain('/360-wellness');

标签: automationplaywright

解决方案


好的,所以我从一开始就对使用有点谨慎page.waitForNavigation(),所以我再次考虑需要在这里使用它。事实证明,我们真的不需要它。考虑到加载时间的变化,我添加了一个waitForSelector()应该允许它 30 秒(或者您可以setTimeout设置自定义等待时间)。

另外,这里有一些关于waitForNavigation()方法的东西 -

page.waitForNavigation()返回一个仅在导航完成后才解析的承诺。该文件提到 -

如果由于 History API的使用而导航到不同的锚点或导航,导航将解析为null.

由于站点开发方法可能模棱两可,因此最好避免使用上述功能。特别是因为它还指出 -

当您运行将间接导致页面导航的代码时,它很有用

...老实说,我并不清楚用例。

无论如何,这是有效的;完整的test.spec.ts文件 -

import { Page } from "playwright-core";

describe("Test Suite for a patient random guy on Stack Overflow", () => {
  it("Test Gen: [URL Text] Testing the correct URL path", async () => {
    let page: Page;
    page = await context.newPage();
    await page.goto("https://ariix.newage.com");
    page.hover("nav >> text=Our Story");
    await page.waitForSelector("nav >> text=About");
    await page.click("nav >> text=About");
    console.log(page.url());
    expect(page.url()).toContain("story");
    //await page.pause();
    await page.hover("nav >> text=Our Story");
    await page.waitForSelector("nav >> text=360° Wellness");
    await page.click("nav >> text=360° Wellness");
    console.log(page.url());
    expect(page.url()).toContain("/360-wellness");
  });
});

它似乎在做/打印你的目标 -

在此处输入图像描述

希望这最终解决了这个问题。让我们知道:)


推荐阅读