#automation #playwright
Вопрос:
Я тестирую навигацию на нашем веб-сайте с помощью 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');
Комментарии:
1. Вы пробовали преобразовать URL-адрес в строку?
2. Если
url()
уже возвращает строку, то, возможно, отсутствующиеawait
ранееpage.url()
могли бы ее решить? Пожалуйста, дайте нам знать, если это сработает.3. Я добавил
await
передpage.url()
, и это не помогло. Моя IDE даже говорит, что это не нужно.page.url()
уже преобразует его в строку, это встроенная функциональность.4. Я понимаю. И вы уверены, что в URL-адресе действительно есть этот
/nav
текст? вы проверяли это сheadless: false
помощью ?5. Да, я могу подтвердить. При использовании
await page.pause()
и прохождении кода я могу отчетливо видеть/nav
в URL-адресе, а затем получить ошибку выше. И я всегда провожу свои тесты внутриheadless: false
.
Ответ №1:
Хорошо, поэтому я page.waitForNavigation()
с самого начала немного опасался использовать его, поэтому я еще раз подумал о необходимости использовать его здесь. Оказывается, на самом деле нам это не нужно. Учитывая различия во времени загрузки, я добавил waitForSelector()
, что это должно занять 30 секунд (или вы могли setTimeout
бы установить пользовательское время ожидания).
Кроме того, вот немного о waitForNavigation()
методе —
page.waitForNavigation()
возвращает обещание, которое будет выполнено только после завершения навигации. В документации упоминается —
В случае перехода на другой якорь или навигации из-за использования 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");
});
});
И, похоже, он делает/печатает то, к чему вы стремились —
Надеюсь, это решит эту проблему с вашей стороны. Дайте нам знать 🙂