Java Selenium动作链-在按住修改器键的同时单击多个元素

Java Selenium动作链-在按住修改器键的同时单击多个元素,java,selenium,selenium-webdriver,vaadin,Java,Selenium,Selenium Webdriver,Vaadin,我有一个场景,我必须在按住CTRL修改键的同时单击多个WebElements Selenium Actions generator看起来正是为此目的而设计的,因此我构建了以下操作序列: @FindBy(css = "some_css_selector") private List<WebElement> elements; for (WebElement element : elements) { Actions builder = new Actions(driver);

我有一个场景,我必须在按住CTRL修改键的同时单击多个WebElements

Selenium Actions generator看起来正是为此目的而设计的,因此我构建了以下操作序列:

@FindBy(css = "some_css_selector")
private List<WebElement> elements;

for (WebElement element : elements) {
    Actions builder = new Actions(driver);

    builder.keyDown(Keys.CONTROL)
        .click(element)
        .keyUp(Keys.CONTROL);

    Action selectMultiple = builder.build();

    selectMultiple.perform();
    }
对每个元素使用单独的生成器 我错过了什么把戏吗

另外,我正在使用Firefox,它应该支持官方网站上所说的Actions类


EDIT1我尝试单击的元素是Vaadin生成的网格单元。

正如您所说,您正在使用注释中的Vaadin网格单元元素

我已自动选择表内容。selenium单击对此不起作用。作为一种解决方法,我将更改类名以选择单元格。将v-selected添加到类名中可以实现这一点

  WebDriver driver = new ChromeDriver();
    driver.get("http://demo.vaadin.com/sampler/#ui/grids-and-trees/table");
    List<WebElement> elements = driver.findElements(By.xpath("//tr[starts-with(@class,'v-table-row')]"));
    JavascriptExecutor js = (JavascriptExecutor) driver;
    for (WebElement element : elements) {
        if (element.isDisplayed()) {
            js.executeScript("arguments[0].className=arguments[0].className+' v-selected';", element);
        }
    }

要同时单击这两个元素,或者what@Madhan否,我想在按住CTRL键的同时逐个单击列表中的每个元素。是否可以提供指向网页的链接CTRL-click要选择的元素类型复选框/单选按钮/链接这些是Vaadin生成的网格单元元素。不确定这是不是100%正确的描述。谢谢。但这与我在问题中描述的方法有何不同?@EugeneS建筑商在外面是的,我明白了。但我认为这不重要。我认为这是有问题的执行阶段。是的,我也测试了你的代码,它也工作得很好。可能是由于应用程序行为。是的,我开始认为这可能是不幸的原因。
  WebDriver driver = new ChromeDriver();
    driver.get("http://demo.vaadin.com/sampler/#ui/grids-and-trees/table");
    List<WebElement> elements = driver.findElements(By.xpath("//tr[starts-with(@class,'v-table-row')]"));
    JavascriptExecutor js = (JavascriptExecutor) driver;
    for (WebElement element : elements) {
        if (element.isDisplayed()) {
            js.executeScript("arguments[0].className=arguments[0].className+' v-selected';", element);
        }
    }