我正在尝试从多选下拉菜单中选择选项,它选择了几个,然后显示错误WebDriverError:java.net.ConnectException:连接被拒绝:connect。
这是我要从yml传递值并逐一检查并单击的功能
async assignViewersToUser(viewsOption: string){
if (viewsOption !== null) {
browser.manage().deleteAllCookies();
await this.viewersDropdown.click();
var view = viewsOption.split(',');
for (let i = 0; i < view.length; i++) {
var viewsList = element.all(by.xpath('.//div[@class="pq-select-menu"]//span[contains(text(), "' + view[i] + '")]/parent::label/input'));
await viewsList.filter(function (ele) {
return ele.isDisplayed();
}).then(async function (viewsList) {
if (await viewsList[0].isSelected() === true) {
console.log(viewsList[0] + ' Case is Already selected');
} else {
await viewsList[0].click();
}
});
}
} else {
console.log('No View found against this user');
}
await browser.sleep(1000);
}
获取此异常
WebDriverError: java.net.ConnectException: Connection refused: connect
at Object.checkLegacyResponse (C:\Users\ediscovery.ADLAB\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:546:15)
at parseHttpResponse (C:\Users\ediscovery.ADLAB\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\http.js:509:13)
at doSend.then.response (C:\Users\ediscovery.ADLAB\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\http.js:441:30)
at process._tickCallback (internal/process/next_tick.js:68:7)Error
at ElementArrayFinder.applyAction_ (C:\Users\ediscovery.ADLAB\AppData\Roaming\npm\node_modules\protractor\built\element.js:459:27)
at ElementArrayFinder.(anonymous function).args [as isDisplayed] (C:\Users\ediscovery.ADLAB\AppData\Roaming\npm\node_modules\protractor\built\element.js:91:29)
at ElementFinder.(anonymous function).args [as isDisplayed] (C:\Users\ediscovery.ADLAB\AppData\Roaming\npm\node_modules\protractor\built\element.js:831:22)
at C:\Ihsan\QuinCTest\Test\Pages\UserPage.ts:353:20
at parentWebElements.map (C:\Users\ediscovery.ADLAB\AppData\Roaming\npm\node_modules\protractor\built\element.js:229:28)
at Array.map ((anonymous))
at getWebElements.then (C:\Users\ediscovery.ADLAB\AppData\Roaming\npm\node_modules\protractor\built\element.js:227:46)
at process._tickCallback (internal/process/next_tick.js:68:7)
答案 0 :(得分:2)
您的函数存在一些语法问题。使用异步/等待时,几乎所有操作现在都需要手动等待,.then
几乎不需要。
注意:请注意,仅当filteredList[0]
被硬编码时,您的函数才会始终选择第一个复选框。
您可以尝试以下方法并让我知道吗?
async assignViewersToUser(viewsOption: string){
//viewsOption should never be null so throw error if it it. Rest of function won't be executed if null
if (viewsOption === null) throw new Error('viewsOption is null');
//Need to await deleteAllCookies()
await browser.manage().deleteAllCookies();
await this.viewersDropdown.click();
var view = viewsOption.split(',');
for (let i = 0; i < view.length; i++) {
var viewsList = await element.all(by.xpath('.//div[@class="pq-select-menu"]//span[contains(text(), "' + view[i] + '")]/parent::label/input'));
//No need to use .then when using awaits
let filteredList = await viewsList.filter(function (ele) {
return ele.isDisplayed();
});
if (await filteredList[0].isSelected() === true) {
console.log(filteredList[0] + ' Case is Already selected');
} else {
await filteredList[0].click();
}
};
await browser.sleep(1000);
}