剧作家中的过滤列表问题 (java)

Problem with filtering list in playwright (java)

提问人:fotrenc 提问时间:10/21/2023 最后编辑:fotrenc 更新时间:10/23/2023 访问量:54

问:

我对剧作家有疑问 - 我正在尝试过滤页面上的列表 https://en.wikipedia.org/wiki/Elasticsearch

带有可用语言列表,但我在用“Deutsch”填写此字段后收到

com.microsoft.playwright.PlaywrightException: Error {
  message='Error: strict mode violation: locator("body > div.grid.uls-menu.uls-narrow > div.row.uls-language-list.uls-lcd.uls-lcd--no-quicklist > div:nth-child(9) > div > ul > li > a") resolved to 21 elements:
    1) <a lang="ar" dir="rtl" hreflang="ar" class="autonym…>العربية</a> aka getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("العربية"))
    2) <a lang="fa" dir="rtl" hreflang="fa" class="autonym…>فارسی</a> aka getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("فارسی"))
...

看起来这个列表仍在渲染中。如何等待此列表被正确过滤,然后检查“Deutsch”是否在此列表中? 它适用于

        this.languagesSearch.fill(language);
        this.page.waitForTimeout(4000);

但这可能并不总是奏效。

我正在尝试这样的解决方案:

        this.page.waitForLoadState(LoadState.LOAD);
        this.page.waitForLoadState(LoadState.DOMCONTENTLOADED);
        this.page.waitForLoadState(LoadState.NETWORKIDLE);

以及

this.page.waitForFunction("() => page.evaluate('document.readyState').equals('complete')");

但它没有用。

我想实现的:该列表仅填充 1 个元素的信息(使用“Deutsch”过滤此列表后为“Deutsch”)。

部分方案如下所示:

        WikiPage wikiPage = new WikiPage(page);

        wikiPage.openLanguages();
        wikiPage.assertENIsInList();
        wikiPage.filterLanguages("Deutsch");
        wikiPage.assertDEIsInList();
        wikiPage.assertENIsNotInList();

方法的实现方式如下:

    public void assertDEIsInList() {
        assertThat(langDE).hasCount(1);
    }

    public void assertENIsInList() {
        assertThat(langEN).hasCount(2);
    }

    public void assertENIsNotInList() {
        assertThat(langEN).hasCount(0);
    }

这是部分解决方案,因为此页面上的语言列表包含 21 种语言。实现此目标的最佳解决方案是什么:确保过滤后的列表仅包含结果 - “德语”语言?

奥拉 Fotrenc

等待 剧作家 playwright-java

评论

0赞 ggorlen 10/22/2023
预期输出是多少?我不会说波兰语,也不会在给定的页面上看到“Deutsch”这个词。什么是 ?请提供一个最小的可重复示例。谢谢!languagesSearch
0赞 fotrenc 10/23/2023
我在这篇文章中添加了一些细节。

答: 暂无答案