在Selenium WebDriver中,有一种方法setScriptTimeout(time, unit)
。如果我们看一下它的描述,那就是
Sets the amount of time to wait for an asynchronous script to finish execution before throwing an error. If the timeout is negative, then the script will be allowed to run indefinitely.
我在这里有两个问题 -
setScriptTimeout
设置了一些时间,那么在执行每个Selenium命令(如查找元素,点击它等)之前,它会等待指定的时间让页面的所有javascripts完成它的执行?答案 0 :(得分:1)
setScriptTimeout
唯一能做的就是修改Selenium等待executeAsyncScript
调用返回的时间。因此,如果您使用executeAsyncScript
并且想要设置一个限制,超过该限制,如果脚本没有调用其回调,则声明脚本已死。要修改文档中的一个示例,如果要运行XMLHttpRequest
并确定如果超过10秒,则测试失败,则:
driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);
Object response = ((JavascriptExecutor) driver).executeAsyncScript(
"var callback = arguments[arguments.length - 1];" +
"var xhr = new XMLHttpRequest();" +
"xhr.open('GET', '/resource/data.json', true);" +
"xhr.onreadystatechange = function() {" +
" if (xhr.readyState == 4) {" +
" callback(xhr.responseText);" +
" }" +
"}" +
"xhr.send();");
如果传递给executeAsyncScript
的脚本在10秒内未调用callback
,则Selenium将提起超时。
它特别不影响Selenium等待页面加载的时间。它也不与页面自己执行的任何异步代码有关。