如何使用Selenium Webdriver与List <webelement>结合使用HashSet和LinkedHashSet

时间:2018-07-08 11:05:17

标签: java selenium selenium-webdriver collections webdriver

我已经使用ArrayList和HashSet编写了以下代码。但哈希集无法按预期工作,这意味着它不会删除重复项。但哈希集不允许重复。

**HTML** code

<HTML>
        <BODY>
        <select id= 'WesInn'>
        <option value = 'idli'> IDLI</option>
        <option value = 'vada'> VADA</option>
        <option value = 'sambhar'> SAMBHAR</option>
        <option value = 'Manchurian'> MACHURIAN</option>
        <option value = 'idli'> IDLI</option>
        <option value = 'sambhar'> SAMBHAR</option>
        <option value = 'Tea'> TEA</option>
        </select>
        </body>
        </html>

public class Assgn_DropDownAsc {
    //static String text;
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver","./drivers/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("C:\\Users\\admin\\Desktop\\New folder/Dropdown.html");

        List list = new ArrayList ();
        LinkedHashSet hs = new LinkedHashSet();
         Adding ArrayList elements to the HashSet
         //in order to remove the duplicate elements and 
         //to preserve the insertion order.

        hs.addAll(list);
        //System.out.println(hs);
        //Removing ArrayList elements
        hs.clear();
        System.out.println(hs);
        System.out.println(list);
        //Adding LinkedHashSet elements to the ArrayList
        hs.addAll(list);
        //System.out.println(alloptions.size());
        System.out.println(list);
}
}

输出

[IDLI  VADA  桑巴尔  马赫里安  IDLI  桑巴尔  TEA]

4 个答案:

答案 0 :(得分:1)

如果您存储输出中提到的String,则您的程序运行正常,看起来您正在打印列表而不是hashSet- 将System.out.println(list);更改为System.out.println(hs);

仅在存储类的对象时才重要,在这种情况下,您应该正确重写equals()和hashCode()方法以使用hashSet。

答案 1 :(得分:0)

您可以尝试以下方法:

46
886659200 6000017
11179348 563488904
112321278 512936341
290805893 582941743
981713638 730642556
451606487 821897906
276959357 3493184
348256888 724765346
631201209 265534133
805273482 835799625
7896278 780434096
558123206 298916496
125934025 501664595
3093907 153530369
259080509 243882571
925707583 116455092
424262818 15570209
317202859 428416515
385632830 648856356
430361226 642776630
946215093 428577508
232353771 924654484
210858703 358484249
413081322 682017430
11575422 767941993
771050757 810529689
379926076 348133307
122213626 91834874
71354138 418442988
209818788 131444731
498071620 348763190
33476125 229092671
804771068 917072705
519783854 347122605
119883416 521216836
286529548 492247353
228879775 837125515
532450512 150833406
941425991 107647662
232307150 352065548
737027784 217852390
678923524 583497416
713585999 587088651
448042752 460509778
135584007 849215265
120007541 541958087

输出:

10
50 50
75 50
100 50
50 75
75 75
100 75
1000 1000
1000 1000
1000 1000
1000 1000

答案 2 :(得分:0)

这里有两个示例,说明如何使用 selenium webdriver HashSet LinkedHashSet List<WebElement>一起使用:

Java HashSet

Java HashSet类用于创建使用哈希表进行存储的集合。它继承了AbstractSet类并实现Set接口。

  • 有关Java HashSet类的要点是:

    • HashSet使用称为哈希的机制存储元素。
    • HashSet仅包含唯一元素。
    • 列表和集合之间的区别:列表可以包含重复元素,而集合仅包含唯一元素。
  • HashSet类声明:

    public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable 
    
  • 示例(在Google搜索页内):

    List <WebElement> my_list = driver.findElements(By.xpath("//div[@id='rso']//div[@class='srg']/div[@class='g']//h3/a"));
    HashSet<WebElement> values = new HashSet<>(my_list);
    for(WebElement value:values)
        System.out.println(value.getAttribute("innerHTML"));
    
  • 控制台输出:

    Selenium (software) - Wikipedia
    Introduction — Selenium Documentation
    Selenium Tutorial
    Selenium Testing for Enterprise End-to-End Tests - Tricentis
    Selenium - Web Browser Automation
    Free Selenium Tutorials - Guru99
    Downloads - Selenium
    Selenium IDE
    Selenium with Python — Selenium Python Bindings 2 documentation
    

Java LinkedHashSet

Java LinkedHashSet类是set接口的Hash表和Linked list实现。它继承了HashSet类并实现Set接口。

  • 有关Java HashSet类的要点是:

    • 仅包含唯一元素,例如HashSet。
    • 提供所有可选的set操作,并允许空元素。
    • 保持插入顺序。
    • LinkedHashSet类的层次结构。
    • LinkedHashSet类扩展了实现Set接口的HashSet类。 Set接口按层次结构继承Collection和接口。
  • LinkedHashSet类声明:

    public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable
    
  • 示例(在Google搜索页内):

    List <WebElement> my_list = driver.findElements(By.xpath("//div[@id='rso']//div[@class='srg']/div[@class='g']//h3/a"));
    LinkedHashSet<WebElement> values = new LinkedHashSet<>(my_list);
    for(WebElement value:values)
        System.out.println(value.getAttribute("innerHTML"));
    
  • 控制台输出:

    Selenium - Web Browser Automation
    Selenium IDE
    Downloads - Selenium
    Introduction — Selenium Documentation
    Free Selenium Tutorials - Guru99
    Selenium (software) - Wikipedia
    Selenium with Python — Selenium Python Bindings 2 documentation
    Selenium Tutorial
    Selenium Testing for Enterprise End-to-End Tests - Tricentis
    

答案 3 :(得分:0)

Here is the solution I got.

package qsp;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;

public class DropdownAscen {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver","./drivers/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("C:\\Users\\admin\\Desktop\\New folder/Dropdown.html");

        WebElement listbox = driver.findElement(By.id("WesInn"));

        Select sel = new Select(listbox);
        List<WebElement> alllist = sel.getOptions();
        int count = alllist.size();
        System.out.println(count);
        /*for(int i=count-1;i>0;i--)
        {
            System.out.println(alllist.get(i).getText());
        }*/
        //Set hs = new HashSet<>(); /we will use this when we don't allow duplicate but not maintain insertion order
        Set<String> hs = new TreeSet<>(); //we will use this to maintain duplication & sorting order

        for(int i =0; i<count;i++)
        {
            WebElement option = alllist.get(i);
            String txt = option.getText();
            hs.add(txt);
            //System.out.println(txt);
        }
        for(String sortedLst:hs)
        {
            System.out.println(sortedLst);
        }
    }}

输出

IDLI  马赫里安  桑巴尔  茶  VADA