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

时间:2015-08-24 14:38:13

标签: java xpath selenium-webdriver automation

我一直在搞乱这个选项页面的自动化,因为它提供了各种各样的选项,每个选项都有自己的子选项,我不想花时间通过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;
            }
        }
    }

通过运行此操作,我得到了一个类似

的打印输出
  • 里程

  • 传送

  • 气体类型

等等......所以热潮!我知道它们已被识别,但我的e.click()实际上并未点击。我开始测试时没有出现任何错误,只是说它已经通过,但按钮实际上从未被点击过。下面是我正在使用的html片段,你可以看到它是如何嵌套的。

enter image description here

2 个答案:

答案 0 :(得分:1)

对于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();
    }

答案 1 :(得分:0)

修复了..对于任何有类似问题的人,我认为这是因为当开发这个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;
            }
        }
    }