我正在尝试使用 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 键单击。
对六个元素调用该函数的结果如下,选择了以下元素:
- the 单独第一个元素
- the 单独第二
- the 第三个与第二个
- the 单独第四
- the 第五与第四
- the 单独第六
换句话说,它最多选择两个元素,然后取消选择所有元素并再次选择最多两个。
知道那里发生了什么吗?
附加问题:是否可以将这些操作直接发送到元素(而不是使用 browser.actions())?似乎只有键盘按键或鼠标操作可以发送到元素,但不能同时发送到元素(类似于 sendKeys().click())。
问题是,您通过调用执行每个循环的操作序列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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)