我正在使用Selenide并尋找機會根據父母的ElementsCollection 創建子元素。例如,我有一個 web 表和一個由表行組成的父 ElementsCollection。因此,在按某種條件過濾此集合后,我得到例如 50 個結果行。然后需要將每行中的第一個單元格作為 SelenideElement 保存在新的 ElementsCollection(子項)中。如果我使用 List,這種情況沒有任何問題,因為我可以使用 stream() 來做到這一點:
List<SelenideElement> parents = $$("parent_css_selector");
List<SelenideElement> children = parents.stream().filter(s -> s.getText().equals("some_text")).map(s -> s.$("child_css_locator")).collect(Collectors.toList());
//or even in List<String> if I need to...
List<String> childrenTexts = parents.stream().filter(s -> s.getText().equals("some_text")).map(s -> s.$("child_css_locator")).getText().collect(Collectors.toList());
但是由于在 Selenide 6.2.0 中不推薦使用 stream() ,所以我找不到這樣做的機會。
uj5u.com熱心網友回復:
我在 Gitter 和 GitHub 的專門 Selenide 主題中提出了這個問題。我想指出,我在一小時內收到了回復,這是專案開發和支持方面非常有價值的方法。)) 這是 Selenide 創始人 Andrei Solntsev 的回答。
我建議避免如此長的迭代等。它會導致測驗緩慢。相反,我會撰寫一個適當的 xpath,只需一個 Web 驅動程式呼叫就可以找到所有需要的元素。
我注冊了一個添加非棄用 stream() 方法的功能請求:#1773
我真的不建議以這種方式使用迭代元素。這樣的測驗是非常無效的。只需按照棄用通知的建議撰寫 CollectionCondition 即可。
據我了解,他將在 ElementsCollection 中回傳未棄用的 stream()。
uj5u.com熱心網友回復:
您的 IDE 應該為您解決這個問題。由于stream()已棄用,您可以用 for 回圈替換它,例如這個
List<SelenideElement> children;
{
List<SelenideElement> list = new ArrayList<>();
for (SelenideElement s : parents) {
if (s.getText().equals("some_text")) {
SelenideElement child_css_locator = s.$("child_css_locator");
list.add(child_css_locator);
}
}
children = list;
}
IntelliJ 會自動生成它,如果它不是您想要的,但它不再依賴于stream().
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/461090.html
上一篇:硒網路驅動程式android
下一篇:獲取主頁中子鏈接的鏈接和標題
