我有一个场景,我必须在按住 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();
}
很遗憾,这对我不起作用。它所做的是分别选择每个元素,而不是一起选择。
我也尝试了其他选项,但没有成功:
- 根本没有使用
.keyUp
逐一手动定义元素,然后在理论上按住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();
- 为每个元素使用单独的构建器
我是不是漏掉了什么技巧?
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/