gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:38 25 4
gpt4 key购买 nike

我有一个场景,我必须在按住 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com