java - Selenium Action 链 - 在按住修改键的同时单击多个元素

标签 java selenium selenium-webdriver vaadin

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

Selenium Actions 生成器看起来就像是专门为此目的而设计的,所以我构建了以下 Action 序列:

@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. 逐一手动定义元素,然后在理论上按住CTRL 的同时对每个元素调用.click按钮

    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. 为每个元素使用单独的构建器

我是不是漏掉了什么技巧?

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

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

最佳答案

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

我已经自动化了一个 simple flow选择表格内容。selenium click 对此不起作用。作为一种解决方法,我正在更改 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);
        }
    }

关于java - Selenium Action 链 - 在按住修改键的同时单击多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31262889/

相关文章:

java - 如何获取数据提供者的总迭代次数

java - 如何通过代码设置地理位置

python - Selenium +Python : CSS Selector -- NoSuchElement error

python - 使用 python selenium 打开一个 YouTube 视频

java - 找不到 WebApplicationContext : no ContextLoaderListener

java - 我们如何在Java中编写 float 的二进制、八进制和十六进制文字?

java - 使用逗号作为分隔符分隔字符串中的 id 或值

java - 用java连接mongoDB

python - 类型错误 : required field "posonlyargs" missing from arguments error running a Pytest Script on Python 3. 8.1

java - Selenium 多次点击