automation - 使用 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');
解决方案
好的,所以我从一开始就对使用有点谨慎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");
});
});
它似乎在做/打印你的目标 -
希望这最终解决了这个问题。让我们知道:)
推荐阅读
- node.js - 护照注销()错误:模型“somemodel(不是用户模型)”的路径“_id”处的值“logout”转换为 ObjectId 失败
- java - Hadoop 节点未激活
- ruby - Typhoeus Ruby 删除请求中的有效负载
- android - 将 androidPlugin 更新到 3.2.1 后无法解析自定义 buildType 的依赖关系
- excel - 扑克经销商逻辑
- javascript - 在 Edge Extension 和 WPF 之间共享数据
- python-3.6 - 当我的代码正常运行时,为什么会出现错误“__init__() missing 1 required positional argument”?
- ibm-cloud - 通过 ibm-cos-sdk 将文件流式传输到对象存储
- java - HashMap 键值存储和检索
- docker - 连接时出错:获取 http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.38/info