Kaustubh:
私は、項目のリストがあるアプリケーションのビューを持っています。200件のレコードを持つ10ページは、ページごとに20件のレコード、言うがあります。私はunqiueユーザー数が割り当てられていたいです。ページごとに固有のレコードを取得することができ、以下のコードI'amから。しかし、私は、レコード全体で一意のユーザーエントリを取得したいです。ユーザー「ジャック」が発見された場合、同じユーザーが後のページで発見されたのであれば、たとえば、実行ので、私はそれがスキップされた取得したいながら。前もって感謝します!
脚本:
List<WebElement> efirstpagecount = driver.findElements(By.xpath("//*[@id='usersList']/tbody/tr/td[3]"));
Set<String> uniqueUsers = efirstpagecount.stream().map(WebElement::getText).map(String::trim).distinct().collect(Collectors.toSet());
System.out.println("First page count: "+uniqueUsers.size());
アンドレイSuvorkov:
あなたはこのようなあなたのセットをマージすることができます:
set1.addAll(set2);
これは、SET2からSET1に明確なすべての要素を追加します。コードサンプル:
List<WebElement> efirstpagecount = driver.findElements(By.xpath("//*[@id='usersList']/tbody/tr/td[3]"));
Set<String> uniqueUsers = efirstpagecount.stream().map(WebElement::getText).map(String::trim).distinct().collect(Collectors.toSet());
System.out.println("First page count: "+uniqueUsers.size());
List<WebElement> esecondpagecount = driver.findElements(By.xpath("//*[@id='usersList']/tbody/tr/td[3]"));
Set<String> uniqueUsers2 = esecondpagecount.stream().map(WebElement::getText).map(String::trim).distinct().collect(Collectors.toSet());
uniqueUsers.addAll(uniqueUsers2); // merge two sets
System.out.println("First and second page count: "+uniqueUsers.size());
あるいは、この:
Set<String> allUsers = new HashSet();
while(true){
List<WebElement> users = driver.findElements(By.xpath("xpath"));
allUsers.addAll(users.stream().map(WebElement::getText).map(String::trim).distinct().collect(Collectors.toSet()));
// move to next page if exists, else break loop
}
System.out.println("All pages count: " + allUsers.size());
PSの性能はaddAll()
O(N)です。
// implementation of addAll() method
public boolean addAll(Collection<? extends E> c) {
boolean modified = false;
for (E e : c)
if (add(e))
modified = true;
return modified;
}