什么时候应该使用setScriptTimeout?

时间:2015-04-28 07:22:55

标签: javascript selenium selenium-webdriver

在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.

我在这里有两个问题 -

  1. 我应该在使用它时感到困惑。如果有人用一个例子解释它,那将非常有帮助
  2. 如果我为setScriptTimeout设置了一些时间,那么在执行每个Selenium命令(如查找元素,点击它等)之前,它会等待指定的时间让页面的所有javascripts完成它的执行?

1 个答案:

答案 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等待页面加载的时间。它也不与页面自己执行的任何异步代码有关。