Что такое SetScriptTimeout-Webdriver



Когда SetScriptTimeout следует использовать и, пожалуйста, приведите мне любой пример.



Я знаю defn



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.


Но не уверен, что именно он делает.
562   3  

3 ответов:

У вас уже есть два ответа, ни один из которых я не нахожу ясно объясняющим смысл установки таймаута сценария.

Во-первых, важно, что таймаут скрипта влияет только на JavaScript-код, выполняемый с executeAsyncScript и ни на что другое. В частности, на executeScript это не влияет.

Так почему же вы хотите установить тайм-аут для executeAsyncScript? Чандан Наяк правильно объяснил, что тайм-аут по умолчанию равен 0s, поэтому вы должны изменить этот тайм-аут, если хотите использовать executeAsyncScript с асинхронными скриптами, которые действительно выполняют некоторую работу. Но почему бы просто не установить его в -1 и не покончить с ним? В конце концов, если вы установите его в -1, то вы отключите тайм-аут. Так что у вас больше не будет тайм-аутов. Миссия выполнена, верно? Нет.

То, что вы хотите сделать, - это установить таймаут в значение, которое позволяет коду, который вы используете с executeAsyncScript, выполнять его работу , в то же время обнаруживая, когда сценарий вышел из строя. Например, если по опыту вы знаете, что сценарий, который вы передаете executeAsyncScript, будет выполнен за 2 секунды или меньше (за исключением, возможно, крайне необычных обстоятельств), затем вы устанавливаете тайм-аут в 2 секунды, так что если где-то есть ошибка и код никогда не завершается, вы получаете тайм-аут через 2 секунды. В противном случае селен будет счастливо ждать вечно, пока сценарий не будет завершен.

Из документации WebDriver: setScriptTimeout (долгое время, java.утиль.параллельный.Единица измерения времени) Задает время ожидания завершения выполнения asynchronous script Перед выдачей ошибки. Это работает only для Ассинхронных скриптов (executeAsyncScript)

Давайте запустим простой javascript: (Не устанавливайте setScriptTimeout) - Теперь это должно выполняться без каких-либо проблем.

((JavascriptExecutor) driver).executeScript("alert('hello world');");


давайте запустим простой Ассинхронный скрипт: ( Не устанавливайте setScriptTimeout) - это завершится ошибкой - "Тайм-аут ожидания результата асинхронного скрипта после 0 МС"

 ((JavascriptExecutor) driver).executeAsyncScript("window.setTimeout(arguments[arguments.length - 1], 500);");

Чтобы решить эту проблему: setScriptTimeout до 1 секунды:

driver.manage().timeouts().setScriptTimeout(1, TimeUnit.SECONDS);

А затем запустите тот же сценарий Assync, упомянутый выше, и он будет выполняться без каких-либо ошибок.


Причина: Время ожидания по умолчанию для сценария, который будет выполняться, равно 0 мс. в большинстве случаев, включая приведенные ниже примеры, необходимо установить веб-драйвер времени ожидания сценария.Перерывы.setScriptTimeout (длинный, java.утиль.параллельный.TimeUnit) заранее к a значение достаточно большие

Дополнительные ссылки:
Когда следует использовать setScriptTimeout?
Вебдрайвера executeAsyncScript против executeScript
с WebDriver док

Автоматизация веб-приложений зависит от многих факторов, таких как браузер, скорость сети, встроенные сценарии и т. д. Чтобы написать надежный код для работы во всех средах, нам нужно сначала дождаться WebElements, прежде чем выполнять какие-либо операции над ними. WebDriver wait (синхронизация) может быть получен либо с помощью support.ui, либо driver().manage().timeouts()

Если мы используем driver.manage().timeouts(), обычной практикой для достижения синхронизации является использование JavaScript через JavascriptExecutor, которые, в свою очередь, предоставляют два метода для сценария исполнение:

ExecuteAsyncScript - > Этот метод не блокирует выполнение следующей строки кода...до тех пор, пока выполнение этого метода не будет завершено. Этот метод будет выполняться так же, как и следующая строка кода...асинхронно. (не блокируя друг друга)

ExecuteScript -> Этот метод блокирует выполнение до тех пор, пока оно не будет завершено, а затем переходит к следующей строке кода. Короче говоря, ваш код автоматизации остановится до тех пор, пока Javascript не будет выполняется с помощью этого метода.

Теперь, поскольку метод executeAsyncScript не блокирует выполнение следующей строки кода, было бы полезно использовать метод driver.manage().timeouts().setScriptTimeout(30,SECONDS); , чтобы наш код мог подождать определенное количество времени для завершения выполнения асинхронного скрипта, прежде чем выдавать ошибку.

Comments

    Ничего не найдено.