Давайте розберемося, в чому сакральний сенс і основна відмінність цих методів.
executeScript
- Переданий в даний метод джава скрипт буде виконаний в контексті обраного фрейму або вікна.
- Буде виконаний як тіло анонімної функції.
- В даному скрипті можна використовувати об'єкт document як посилання на поточний документ. Це означає, що ви можете виконувати джава скрипт, що містить, наприклад, ось такий рядок: getElementById ( «id»).
- Локальні змінні після виконання скрипта стануть недоступними, хоча глобальні збережуться. Даний пункт дозволяє змінювати загальні змінні на сторінці.
- Якщо сценарій має повернені значення, то перетворення в об'єкти Java відбувається наступним чином:
- Html-елемент трансформується в WebElement
- Decimal - в Double
- Non-decimal number - в Long
- Логічне значення - в Boolean
- Для інших випадків буде повернений String
- Масив буде перетворений в лист об'єктів, які трансформуються згідно з правилами, перерахованим вище. ВАЖЛИВО! Списки можуть бути вкладеними! Тобто якщо з JS буде переданий двовимірний масив, то він перетвориться в список списків.
Зверніть увагу. ExecuteScript повертатися не примітиви, а об'єкти! Це необхідно враховувати при подальшій роботі.
- Якщо ваш скрипт нічого не повертає, то метод поверне null.
- Передані в скрипт значення можуть бути числом, логічним значенням, рядком, WebElement'ом або списком. Використовувати їх в самому JS можна як елементи масиву arguments. Тобто якщо в метод executeScript передати, скажімо, WebElement. то клікнути по ньому можна буде наступним JS кодом: arguments [0] .click ();