什么是SetScriptTimeout-Webdriver

J_C*_*der 6 selenium selenium-webdriver

当应该使用SetScriptTimeout时,请提供任何示例.

我知道这个定义

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.
Run Code Online (Sandbox Code Playgroud)

但不确定它究竟做了什么.

Lou*_*uis 7

你已经有了两个答案,我都没有找到解释清楚设置脚本超时的问题.

首先,它是重要的脚本超时影响与执行JavaScript代码executeAsyncScript没有别的.特别是,executeScript不受它的影响.

那你为什么要设置超时executeAsyncScriptChandan Nayak正确地解释了默认超时为0,因此如果要使用executeAsyncScript实际执行某些工作的异步脚本,则必须更改此超时.但为什么不把它设置为-1并完成呢?毕竟,如果你把它设置为-1那么你关闭超时.所以你不会再有任何超时.任务完成了,对吗?不.

您要做的是将超时设置为一个值,该值允许您使用的代码executeAsyncScript执行它,同时检测脚本何时流氓.例如,如果根据经验你知道你传递给的脚本executeAsyncScript将在2秒或更短的时间内完成(除非在极不寻常的情况下),那么你将超时设置为2秒,这样如果某个地方出现了错误,代码永远不会终止,2秒后会超时.否则,Selenium将很高兴地等待脚本完成.


Cha*_*yak 5

来自 WebDriver 文档:( 长时间,java.util.concurrent.TimeUnit 单位)设置在引发错误之前setScriptTimeout等待完成执行的时间量。asynchronous script这适用only于 Assync 脚本 (executeAsyncScript)

让我们运行一个简单的 javascript:(不要设置setScriptTimeout)- 现在这将执行而不会引发任何问题。

((JavascriptExecutor) driver).executeScript("alert('hello world');");
Run Code Online (Sandbox Code Playgroud)


让我们运行一个简单的异步脚本:(不要设置setScriptTimeout)- 这将失败并出现错误 - “0ms 后等待异步脚本结果超时”

 ((JavascriptExecutor) driver).executeAsyncScript("window.setTimeout(arguments[arguments.length - 1], 500);");
Run Code Online (Sandbox Code Playgroud)

要解决该问题: setScriptTimeout改为 1 秒:

driver.manage().timeouts().setScriptTimeout(1, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

然后运行上面提到的相同的 Assync 脚本,它将执行而不会出现任何错误。


原因: 脚本执行的默认超时时间是0ms。在大多数情况下,包括下面的示例,必须事先将脚本超时 WebDriver.Timeouts.setScriptTimeout(long, java.util.concurrent.TimeUnit) 设置为足够大的值

更多参考链接:
何时应该使用 setScriptTimeout?
WebDriverexecuteAsyncScript 与executeScript
WebDriver 文档


归档时间:

查看次数:

10806 次

最近记录:

9 年,3 月 前