python-selenium:execute_script vs execute_async

时间:2017-09-03 08:58:22

标签: python selenium

我不清楚硒中execute_scriptexecute_async_script之间的区别。

在python-selenium中给出这个例子,进入pytest函数:

driver.get(url)

js = '''
var video = document.getElementById("myVideo");

video.onplaying=function() {
  return "play";
};
'''

video_play = driver.execute_script(js)
assert video_play == "play"

结果是:

E       AssertionError: assert None == 'play'
我错过了什么?我应该在js中使用execute_async和async / await函数吗?你能举几个例子来指点我吗?

1 个答案:

答案 0 :(得分:3)

您需要使用异步脚本。

driver.get(url)

js = '''
var callback = arguments[arguments.length - 1];
var video = document.getElementById("myVideo");

video.onplaying=function() {
  callback ("play");
};

setTimeout(function(){
  callback("notplayed");
}, 2000);
'''

video_play = driver.execute_async_script(js)
assert video_play == "play"

以上内容是,如果没有返回notplayed,则等待播放最多2秒钟。

请记住,在脚本完成之前,调用不会返回。因此,不要以为您可以在异步脚本之后执行其他代码。在回调或异步超时之前,代码将停留在execute_async_script