Selenium动作链 - 在按住修改键

时间:2015-07-07 07:58:07

标签: java selenium selenium-webdriver vaadin

我有一个场景,我必须在按住 CTRL 修饰键的同时点击多个WebElement

Selenium Actions生成器看起来完全是为了这个目的设计的,所以我构建了以下动作序列:

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

所以不幸的是,这对我没用。它所做的是分别选择每个元素,但不能同时选择它们。

我尝试了其他选择但没有运气:

  1. 根本没有使用.keyUp
  2. 逐个手动定义元素,然后在每个元素上调用.click,而理论上按住 CTRL 按钮

    WebElement el1 = elements.get(0);
    WebElement el2 = elements.get(1);
    
    Actions builder = new Actions(driver);
    
    
    builder.keyDown(Keys.CONTROL)
        .click(el1)
        .click(el2)
        .keyDown(Keys.CONTROL); //tried with and without
    
    Action selected = builder.build();
    selected.perform();
    
  3. 为每个元素使用单独的构建器
  4. 我在这里错过了一些技巧吗?

    P.S。我正在使用Firefox,它应该支持Actions类,正如Selenium官方网站上所说的那样。

    EDIT1 我想点击的元素是Vaadin生成的网格单元格。

1 个答案:

答案 0 :(得分:1)

正如您所说,您正在使用评论中的Vaadin网格Cell元素

我已经自动simple flow来选择表格内容。硒点击不会对此产生影响。作为一种解决方法,我正在更改classNames以选择单元格。将v-selected附加到className可以做到这一点

  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);
        }
    }