量角器打字稿错误:WebDriverError:java.net.ConnectException:连接被拒绝:从多选列表中选择值时进行连接

时间:2019-06-02 11:07:47

标签: typescript protractor cucumberjs

enter image description here我正在尝试从多选下拉菜单中选择选项,它选择了几个,然后显示错误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)

1 个答案:

答案 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);
}