我一直在尝试编写一个量角器测试,从自定义下拉菜单中选择一个项目。唯一的问题是,当它尝试单击列表中最后一个元素以外的元素时,它会挂起并超时。当我删除click()方法调用它似乎工作正常。由于所有这些调用都是异步完成的,所以当找到元素时,我也看不到停止循环的方法。我的代码如下所示:
var it = null;
for(var i = 1; i <= totalNumberOfAccounts; i++) {
var listItemLocator = '//div[@id="payment-accounts"]/div/ul/li[' + i + ']/label/div/div[2]/div[2]/span[2]';
var item = browser.driver.findElement(protractor.By.xpath(listItemLocator));
item.getText().then(function(value) {
if(value === accountNumber) {
it = item;
}
console.log(value);
})
.then(function clickOption() {
console.log('Clicking...');
if (it) {
console.log('Clicking desired item');
it.click();
console.log('Clicked..');
}
})
}
我也试过这种方法:
this.selectRichSelectOption = function (selector, item) {
var selectList = browser.driver.findElement(selector);
selectList.click();
var desiredOption = '';
var i = 1;
selectList.findElements(protractor.By.tagName('li'))
.then(function findMatchingOption(options) {
console.log(options);
options.some(function (option) {
console.log('Option:');
console.log(option);
var listItemLocator = '//div[@id="payment-accounts"]/div/ul/li[' + i + ']/label/div/div[2]/div[2]/span[2]';
console.log(listItemLocator);
var element = option.findElement(protractor.By.xpath('//label/div/div[2]/div[2]/span[2]'));
console.log('Element:');
console.log(element);
i++;
element.getText().then(function (value) {
console.log('Value: ' + value);
console.log('Item:');
console.log(item);
if (item === value) {
console.log('Found option..');
desiredOption = option;
return true;
}
return false;
});
});
})
.then(function clickOption() {
console.log('Click option');
console.log(desiredOption);
if (desiredOption) {
console.log('About to click..');
desiredOption.click();
}
});
};
这个结果更加奇怪。现在,getText()方法调用突然返回一个空String。但是当我试图检索例如class属性我得到了正确的值。文本值在哪里?
有人可以帮帮我吗?
答案 0 :(得分:0)
这似乎是页面加载的问题。选择后,页面无法完全加载。
尝试使用browser.sleep(timeInMs);
答案 1 :(得分:0)
尝试使用节点8 +的异步函数,例如await
。我经历了这个令人头疼的问题,await
解决了某些事情要出现或具有某些属性。
await browser.wait(EC.presenceOf(element(by.xpath('path leading to element based off attribute'))))