我有一个场景,我必须在按住 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();
}
所以不幸的是,这对我没用。它所做的是分别选择每个元素,但不能同时选择它们。
我尝试了其他选择但没有运气:
.keyUp
逐个手动定义元素,然后在每个元素上调用.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();
我在这里错过了一些技巧吗?
P.S。我正在使用Firefox,它应该支持Actions
类,正如Selenium官方网站上所说的那样。
EDIT1 我想点击的元素是Vaadin生成的网格单元格。
答案 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);
}
}