Тайм-аут скрипта с executeAsyncScript() для вызова пост-выборки

Я пытаюсь запустить скрипт, используя метод executeAsyncScript() с вызовом выборки. так как вызов fetch возвращает обещание, следовательно, на консоли требуется некоторое время для выполнения обещания, но при использовании исполнителя java-скрипта selenium он выдает ошибку, говорящую о тайм-ауте скрипта, поэтому я получаю нуль в качестве вывода. как я могу добиться ожидаемого результата, используя метод селена executeAsyncScript.

String str = (String) js.executeAsyncScript("var myHeaders = new Headers();\n" +
                "myHeaders.append('client-id', 'LPDP');\n" +
                "myHeaders.append('a2z-csrf-token', 'NON_SDF');\n" +
                "myHeaders.append('x-amz-rid', 'M6507NCWPW2FVPSSRMVM');\n" +
                "\n" +
                "let inputEntities = new Map();\n" +
                "inputEntities.set(\"Commons$customerId\", \"\\\"A2ZLDCQRXMMNLG\\\"\")\n" +
                "inputEntities.set(\"Commons$marketPlaceId\", \"\\\"A2XZLSVIQ0F4JT\\\"\")\n" +
                "inputEntities.set(\"Commons$sessionId\", \"\\\"asdb3412\\\"\")\n" +
                "inputEntities.set(\"Commons$ubId\", \"\\\"abc\\\"\")\n" +
                "inputEntities.set(\"Rewards$APPA$Commons$eventId\", \"\\\"prsrohitest-1\\\"\")\n" +
                "inputEntities.set(\"Rewards$APPA$Commons$clientId\", \"\\\"HFC\\\"\")\n" +
                "inputEntities.set(\"Rewards$APPA$Commons$useCaseName\", \"\\\"lineItemPromotionPaymentMethodEvent\\\"\")\n" +
                "inputEntities.set(\"Rewards$APPA$Commons$eventTimeStamp\",\"\\\"2022-04-20T21:21:57.934Z\\\"\" )\n" +
                "inputEntities.set(\"Rewards$APPA$Commons$category\", \"\\\"HFC\\\"\")\n" +
                "inputEntities.set(\"Rewards$APPA$Commons$subCategory\", \"\\\"PREPAID_RECHARGE\\\"\")\n" +
                "inputEntities.set(\"Rewards$APPA$Commons$requestType\", \"\\\"HFCBP\\\"\")\n" +
                "inputEntities.set(\"Rewards$APPA$Commons$partition\", \"\\\"useCaseName,category,subCategory\\\"\")\n" +
                "inputEntities.set(\"Rewards$APPA$Commons$benefitsToBeEvaluated\", \"[\\\"GCCashback\\\",\\\"Coupon\\\",\\\"Membership\\\",\\\"ScratchCard\\\"]\")\n" +
                "\n" +
                "let entitiesToBeResolved = [\"Rewards$APPA$GetAllPromotions$applicablePromotionDetailList\"]\n" +
                "\n" +
                "const executeInput = {\n" +
                "\"inputEntities\": Object.fromEntries(inputEntities),\n" +
                "\"entitiesToBeResolved\": entitiesToBeResolved,\n" +
                "};\n" +
                "\n" +
                "var obj \n" +
                "\n" +
                "fetch("url", {\n" +
                "  method: 'POST',\n" +
                "  headers: myHeaders,\n" +
                "  body: JSON.stringify(executeInput),\n" +
                "})\n" +
                "  .then(response => response.text())\n" +
                "  .then(result => obj = result)\n" +
                "  .then(()=> console.log(obj))\n" +
                "  .catch(error => console.log('error', error));\n" +
                "\n" +
                "  return obj;");

Я получаю null в переменной str. Заранее благодарю за любую помощь

Вы не возвращаете значение, вы передаете его в arguments[0], который является распознавателем обещания. Я ответил то же самое в прошлый раз.

pguardiario 17.05.2022 09:08

Еще раз спасибо за ответ. Поскольку я новичок в javascript, я не могу правильно передать его в arguments[0], не могли бы вы дать мне код ??

dazzyCrazzy 17.05.2022 09:20
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
0
2
14
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Примечание. Я не привык использовать java, поэтому я не знаю, как правильно экранировать строки.

Общий способ сделать это:

js.executeAsyncScript("arguments[0]('foo')")

Вы можете поместить это в обещание then, и оно все равно будет работать.

понял, сработало. Большое спасибо за предложения и большое спасибо за код !!

dazzyCrazzy 17.05.2022 09:54

Другие вопросы по теме