Java 查找并单击列表中的元素-Selenium

Java 查找并单击列表中的元素-Selenium,java,xpath,selenium-webdriver,automation,Java,Xpath,Selenium Webdriver,Automation,我一直在搞乱这个选项页面的自动化,因为它提供了各种各样的选项,每个选项都有自己的子选项,所以我不想花时间通过xpath(或CSS..或或)来识别和声明所有元素。因此,我有一个可靠的代码,它可以很好地在HTML标记中找到文本标识符 public void selectAnOption(String option) { List<WebElement> choice = driver.findElements(By.xpath("//div[@class='at

我一直在搞乱这个选项页面的自动化,因为它提供了各种各样的选项,每个选项都有自己的子选项,所以我不想花时间通过xpath(或CSS..或或)来识别和声明所有元素。因此,我有一个可靠的代码,它可以很好地在HTML标记中找到文本标识符

public void selectAnOption(String option) {
        List<WebElement> choice = driver.findElements(By.xpath("//div[@class='atcui-scrollPanel-wrapper']/ul/li"));
        for(WebElement e : choice){
            System.out.println(e.getText());
            if(e.getText().equals(option)){
                e.click();
                break;
            }
        }
    }
public void selectAnOption(字符串选项){
List choice=driver.findElements(By.xpath(“//div[@class='atcui-scrollPanel-wrapper']/ul/li”);
for(WebElement e:choice){
System.out.println(e.getText());
if(e.getText().equals(选项)){
e、 单击();
打破
}
}
}
通过运行这个,我得到了一个打印输出,就像

  • 里程

  • 传输

  • 气体类型

等等,太棒了!我知道它们已被识别,但我的e.click()实际上并没有单击。当我开始测试时,我没有收到任何错误,它只是说它通过了,但按钮从未真正点击过。下面是我正在使用的HTML段,您可以看到它是如何嵌套的


修复了它。。对于任何有类似问题的人来说,我相信这是因为在开发此html代码时,有多余的空间(用于设计目的或在开发过程中拟合元素..可能?),所以我使用了.contains而不是.equals。嗯

public void selectAnOption(String option) {
        List<WebElement> choice = driver.findElements(By.xpath("//div[@class='atcui-scrollPanel-wrapper']/ul/li"));
        for(WebElement e : choice){
            System.out.println(e.getText());
            if(e.getText().contains(option)){
                e.click();
                break;
            }
        }
    }
public void selectAnOption(字符串选项){
List choice=driver.findElements(By.xpath(“//div[@class='atcui-scrollPanel-wrapper']/ul/li”);
for(WebElement e:choice){
System.out.println(e.getText());
if(例如getText()包含(选项)){
e、 单击();
打破
}
}
}

对于Java 8及以上版本,您可以使用:

public void selectAnOption(String option) {
        List<WebElement> choice = driver.findElements(By.xpath("your_xpath"));
        choice
             .stream()
             .filter(e->e.getText().equals(option))
             .findFirst().get().click();
    }
public void selectAnOption(字符串选项){
List choice=driver.findElements(By.xpath(“您的xpath”);
选择
.stream()
.filter(e->e.getText().equals(选项))
.findFirst().get().click();
}