我正在尝试使用ctrl单击连续元素在我的页面上选择多个元素。 这个功能在手动完成时工作正常,但我在使用量角器进行自动化方面遇到了一些麻烦。
这是我的ptor功能:
this.selectElements = function (names) {
for(var i = 0; i < names.length; i++){
var parentElement = element(by.xpath('//div[@aria-label="select group ' + names[i] + '"]'));
browser.wait(EC.presenceOf(parentElement), DEFAULT_WAIT_TIMEOUT);
browser.actions()
.mouseMove(parentElement).perform();
browser.sleep(500);
browser.actions().keyDown(protractor.Key.CONTROL)
.click()
.perform();
}
因此,对于名称中的每个值,它获取DOM中的元素,在其上移动鼠标,然后按住ctrl单击。
在六个元素上调用此函数的结果如下,选择以下元素:
换句话说,它最多选择两个元素,然后取消选择all并再次选择最多两个元素。 知道那里发生了什么吗?
其他问题:是否可以将这些操作直接发送到元素(而不是使用browser.actions())?似乎只有键盘键或鼠标操作可以发送到元素,但不能同时发送(如sendKeys()。click())。
答案 0 :(得分:3)
问题是,您正在通过调用perform()
方法为每个循环执行操作序列。相反,您需要在循环中链接所有动作序列,然后最后执行它。试试下面的例子,
this.selectElements = function (names) {
var actionSequence = browser.actions().keyDown(protractor.Key.CONTROL);
for(var i = 0; i < names.length; i++){
var parentElement = element(by.xpath('//div[@aria-label="select group ' + names[i] + '"]'));
actionSequence = actionSequence.mouseMove(parentElement).click();
}
actionSequence.perform();
}