Javascript 是否可以将selenium中的js PROMISE值作为变量返回?
我确实使用JS脚本通过xmlhttprequests获得一件事。我需要将该值传递回selenium,以便继续执行进一步的操作。我的代码始终不返回任何值,即使已分配并返回全局变量。我在某个地方读到,不可能恢复原始承诺值Javascript 是否可以将selenium中的js PROMISE值作为变量返回?,javascript,python,selenium,Javascript,Python,Selenium,我确实使用JS脚本通过xmlhttprequests获得一件事。我需要将该值传递回selenium,以便继续执行进一步的操作。我的代码始终不返回任何值,即使已分配并返回全局变量。我在某个地方读到,不可能恢复原始承诺值 var request = "" function send(method,url,data){ const xhr = new XMLHttpRequest(); const promise = new Promise(funct
var request = ""
function send(method,url,data){
const xhr = new XMLHttpRequest();
const promise = new Promise(function(resolve,reject){
xhr.open(method, url)
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.onload = function(){
const raw_content = String(xhr.response)
const start_index = raw_content.indexOf("request")
const end_index = raw_content.indexOf("</settings>")
const x_request = raw_content.substring(start_index+("request=").length+1, end_index-3)
resolve(x_request)
};
xhr.send(data)
});
return promise;
};
async function final(){
await send("POST", "https://www.thecrims.com/login",data).then((responseData)=>{
request = responseData
return responseData
});
};
final();
return request
var request=“”
函数发送(方法、url、数据){
const xhr=new XMLHttpRequest();
常量承诺=新承诺(函数(解析、拒绝){
xhr.open(方法、url)
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
xhr.onload=函数(){
常量原始内容=字符串(xhr.response)
const start\u index=raw\u content.indexOf(“请求”)
const end_index=raw_content.indexOf(“”)
const x_request=raw_content.substring(start_index+(“request=”).length+1,end_index-3)
解决(x_请求)
};
发送(数据)
});
回报承诺;
};
异步函数final(){
等待发送(“POST”https://www.thecrims.com/login,数据)。然后((响应数据)=>{
请求=响应数据
返回响应数据
});
};
最后的();
退货申请
当我将上述代码放入driver.execute_脚本并尝试打印它时,它将不返回任何内容或不返回任何内容。有没有其他方法可以得到这个值 找到了解决方法:)我使用变量的内容运行警报消息,并使用selenium对该警报进行刮除。好吧,您必须对
最终
方法做一些小的更改
async function final(){
const val = await send("POST", "https://www.thecrims.com/login",data).then((responseData)=>{
request = responseData
return responseData
});
return val;
};
这应该返回值
下面是我为验证场景所做的示例测试
jsFunction1 = """window.send =function(method,url){ const xhr = new XMLHttpRequest();
const promise = new Promise(function(resolve,reject){
xhr.open(method, url)
xhr.setRequestHeader("Content-type", "application/json");
xhr.onload = function(){
const raw_content = String(xhr.response)
resolve(raw_content)
};
xhr.send()
}); return promise }; """
jsFunction2 = """window.final =function(){const val =send("get","https://jsonplaceholder.typicode.com/users").then((responseData)=>{
return responseData
}); return val}; """
# load the function so that you can call where ever you want
driver.execute_script(jsFunction1)
driver.execute_script(jsFunction2)
value = driver.execute_script("return final()")
print(value)
使用承诺的方式与声明变量的方式相同
const value = yourPromise().then(value => { return value })
或者在使用selenium的python中:
driver.execute_脚本(“returnyourpromise().then(value=>{returnvalue})”)
您是否先从浏览器控制台尝试过此操作?尝试在final
功能中打印responseData
。通过这种方式,您可以确定问题是否与响应数据有关。如果您需要在浏览器控制台中测试代码的帮助,请告诉我。@supputuri代码可以工作,但我仍然可以;t在python中返回值:(甚至可以返回承诺值吗?