我正在嘗試使用具有 fetch 呼叫的 executeAsyncScript() 方法運行腳本。由于 fetch 呼叫回傳一個承諾,因此在控制臺上需要一些時間來履行承諾,但使用 selenium java 腳本執行器會拋出錯誤,說腳本超時,因此我得到 null 作為輸出。如何使用 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;");
我在 str 變數中得到空值。提前感謝您的幫助
uj5u.com熱心網友回復:
注意:我沒有使用java的習慣,所以我不知道如何正確轉義字串。
執行此操作的一般方法是:
js.executeAsyncScript("arguments[0]('foo')")
你可以把它放在一個承諾中then
,它仍然可以作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/476218.html
標籤:javascript 硒 拿来 请求-承诺 设置脚本超时