提问人:fotrenc 提问时间:10/21/2023 最后编辑:fotrenc 更新时间:10/23/2023 访问量:54
剧作家中的过滤列表问题 (java)
Problem with filtering list in playwright (java)
问:
我对剧作家有疑问 - 我正在尝试过滤页面上的列表 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
答: 暂无答案
评论
languagesSearch