Асинхронный вызов wdio сбрасывает соединение Selenium при вызове обещания - PullRequest
1 голос
/ 23 апреля 2019

Версия: "webdriverio": "^ 5.7.5",

Заранее извиняюсь, если я не уверен, пожалуйста, дайте мне знать и могу передать мои данные соответственно.

Язапускать мои скрипты wdio5 за корпоративным прокси.Он успешно работает во всех браузерах.Я попытался интегрировать вызовы API в платформу и начал сталкиваться с множеством проблем.

Библиотеки Api, такие как supertest, axios [httpsProxyAgent включено], запрос синхронизации, запрос запроса не читают прокси-переменные npm, используемые wdio.Поэтому я получаю следующее сообщение об ошибке при вызовах API

Ошибка: getaddrinfo ENOTFOUND qa.internalurl.co.uk qa.internalurl.co.uk:443

Apiтакие библиотеки, как - request, fetch-with-proxy, успешно выполняют вызовы API с использованием настроек прокси.Мне нужно "дождаться" их ответа, следовательно, переместить мой блок it как асинхронную функцию.Но после успешного ответа в виде асинхронного вызова я получаю следующее сообщение об ошибке

[chrome # 0-0] $ (...). WaitForExist не является функцией

[chrome # 0-0] TypeError: $ (...). waitForExist не является функцией

Не просто waitForExist, сеанс почти не запоминает любые команды selenium / webdriverio.Ясно, что он теряет соединение с селеном в тот момент, когда переключается на асинхронные вызовы для получения ответа на обещание.

Есть ли способ с этим справиться?

let accountNo = "123456";
it.only('verify the dashboard page ',async () => {

            //launches the browser url and cleans the cookies 

            try {
                response = await apiCheck.postApiLoginData(accountNo);
  //Makes to call to API function to get the values
            } catch (err) {
                console.error(err);
            }

            console.log(response);    //prints the successful response data 
            lPage.enterLoginData(accountNo, 'pass1234'); //Fails here as the data is 

            addStep(`Login to the Standard application using username as ${accountNo} and PIN as 74437`);

            lPage.assertSummaryPage(response); 

}

Без блокировки кода Try, успешно войдите в приложение.

1 Ответ

1 голос
/ 24 апреля 2019

Для обработки асинхронного кода без wdio вам необходимо использовать функцию browser.call .Например:

response = browser.call(() => {
    return apiCheck.postApiLoginData(accountNo);
    //Makes to call to API function to get the values
})
...