Best Selenium code snippet using Selenium.WebDriver.execute_async_script
custom_wait_methods.rb
Source:custom_wait_methods.rb
...16# You should have received a copy of the GNU Affero General Public License along17# with this program. If not, see <http://www.gnu.org/licenses/>.18module CustomWaitMethods19 def wait_for_dom_ready20 result = driver.execute_async_script(<<~JS)21 var callback = arguments[arguments.length - 1];22 if (document.readyState === "complete") {23 callback(0);24 } else {25 var leftPageBeforeDomReady = callback.bind(null, -1);26 window.addEventListener("beforeunload", leftPageBeforeDomReady);27 document.onreadystatechange = function() {28 if (document.readyState === "complete") {29 window.removeEventListener("beforeunload", leftPageBeforeDomReady);30 callback(0);31 }32 }33 };34 JS35 raise "left page before domready" if result != 036 end37 # If we're looking for the loading image, we can't just do a normal assertion, because the image38 # could end up getting loaded too quickly.39 def wait_for_transient_element(selector)40 driver.execute_script(<<~JS)41 window.__WAIT_FOR_LOADING_IMAGE = 042 window.__WAIT_FOR_LOADING_IMAGE_CALLBACK = null43 var _checkAddedNodes = function(addedNodes) {44 for(var newNode of addedNodes) {45 if(newNode.matches('#{selector}') || newNode.querySelector('#{selector}')) {46 window.__WAIT_FOR_LOADING_IMAGE = 147 }48 }49 }50 var _checkRemovedNodes = function(removedNodes) {51 if(window.__WAIT_FOR_LOADING_IMAGE !== 1) {52 return53 }54 for(var newNode of removedNodes) {55 if(newNode.matches('#{selector}') || newNode.querySelector('#{selector}')) {56 observer.disconnect()57 window.__WAIT_FOR_LOADING_IMAGE = 258 window.__WAIT_FOR_LOADING_IMAGE_CALLBACK && window.__WAIT_FOR_LOADING_IMAGE_CALLBACK()59 }60 }61 }62 var callback = function(mutationsList, observer) {63 for(var record of mutationsList) {64 _checkAddedNodes(record.addedNodes)65 _checkRemovedNodes(record.removedNodes)66 }67 }68 var observer = new MutationObserver(callback)69 observer.observe(document.body, { subtree: true, childList: true })70 JS71 yield72 result = driver.execute_async_script(<<~JS)73 var callback = arguments[arguments.length - 1]74 if (window.__WAIT_FOR_LOADING_IMAGE == 2) {75 callback(0)76 }77 window.__WAIT_FOR_LOADING_IMAGE_CALLBACK = function() {78 callback(0)79 }80 JS81 raise "element #{selector} did not appear or was not transient" if result != 082 end83 def wait_for_ajax_requests(bridge = nil)84 bridge = driver if bridge.nil?85 result = bridge.execute_async_script(<<~JS)86 var callback = arguments[arguments.length - 1];87 // see code in ui/boot/index.js for where88 // __CANVAS_IN_FLIGHT_XHR_REQUESTS__ and 'canvasXHRComplete' come from89 if (typeof window.__CANVAS_IN_FLIGHT_XHR_REQUESTS__ === 'undefined') {90 callback(-1);91 } else if (window.__CANVAS_IN_FLIGHT_XHR_REQUESTS__ === 0) {92 callback(0);93 } else {94 var fallbackCallback = window.setTimeout(function() {95 callback(-2);96 }, #{(SeleniumDriverSetup.timeouts[:script] * 1000) - 500})97 function onXHRCompleted () {98 // while there are no outstanding requests, a new one could be99 // chained immediately afterwards in this thread of execution,100 // e.g. $.get(url).then(() => $.get(otherUrl))101 //102 // so wait a tick just to be sure we're done103 setTimeout(function() {104 if (window.__CANVAS_IN_FLIGHT_XHR_REQUESTS__ === 0) {105 window.removeEventListener('canvasXHRComplete', onXHRCompleted)106 window.clearTimeout(fallbackCallback);107 callback(0)108 }109 }, 0)110 }111 window.addEventListener('canvasXHRComplete', onXHRCompleted)112 }113 JS114 raise "ajax requests not completed" if result == -2115 result116 end117 def wait_for_animations(bridge = nil)118 bridge = driver if bridge.nil?119 bridge.execute_async_script(<<~JS)120 var callback = arguments[arguments.length - 1];121 if (typeof($) == 'undefined') {122 callback(-1);123 } else if ($.timers.length == 0) {124 callback(0);125 } else {126 var _stop = $.fx.stop;127 $.fx.stop = function() {128 $.fx.stop = _stop;129 _stop.apply(this, arguments);130 callback(0);131 }132 }133 JS134 end135 def wait_for_ajaximations(bridge = nil)136 bridge = driver if bridge.nil?137 wait_for_ajax_requests(bridge)138 wait_for_animations(bridge)139 end140 def wait_for_initializers(bridge = nil)141 bridge = driver if bridge.nil?142 bridge.execute_async_script <<~JS143 var callback = arguments[arguments.length - 1];144 // If canvasReadyState isn't defined, we're likely in an IFrame (such as the RCE)145 if (!window.location.href || !window.canvasReadyState || window.canvasReadyState === 'complete') {146 callback()147 }148 else {149 window.addEventListener('canvasReadyStateChange', function() {150 if (window.canvasReadyState === 'complete') {151 callback()152 }153 })154 }155 JS156 end...
driver.rb
Source:driver.rb
...189 # Arguments to the script. May be empty.190 #191 # @return [WebDriver::Element,Integer,Float,Boolean,NilClass,String,Array]192 #193 def execute_async_script(script, *args)194 bridge.execute_async_script(script, *args)195 end196 #-------------------------------- sugar --------------------------------197 #198 # driver.first(id: 'foo')199 #200 alias_method :first, :find_element201 #202 # driver.all(class: 'bar') #=> [#<WebDriver::Element:0x1011c3b88, ...]203 #204 alias_method :all, :find_elements205 #206 # driver.script('function() { ... };')207 #208 alias_method :script, :execute_script...
execute_async_script
Using AI Code Generation
1driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 500);")2driver.execute_script("alert('Hello World!');")3driver.execute_script("document.getElementById('lst-ib').value='Selenium'")4driver.execute_script("document.getElementById('lst-ib').value='Selenium'")5driver.execute_script("document.getElementById('lst-ib').value='Selenium'")6driver.execute_script("document.getElementById('lst-ib').value='Selenium'")7driver.execute_script("document.getElementById('lst-ib').value='Selenium'")8driver.execute_script("document.getElementById('lst-ib').value='Selenium'")9driver.execute_script("document.getElementById('lst-ib').value='Selenium'")10driver.execute_script("document.getElementById('lst-ib').value='Selenium'")11driver.execute_script("document.getElementById('lst-ib').value='Selenium'")12driver.execute_script("document.getElementById('lst-ib').value='Selenium'")13driver.execute_script("document.getElementById('lst-ib').value
execute_async_script
Using AI Code Generation
1driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 5000);")2driver.find_element(:name, "q").send_keys "Selenium WebDriver"3driver.find_element(:name, "btnK").click4driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 5000);")5driver.find_element(:name, "q").send_keys "Selenium WebDriver"6driver.find_element(:name, "btnK").click7driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 5000);")8driver.find_element(:name, "q").send_keys "Selenium WebDriver"9driver.find_element(:name, "btnK").click10driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 5000);")11driver.find_element(:name, "q").send_keys "Selenium WebDriver"12driver.find_element(:name, "btnK").click13driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 5000);")14driver.find_element(:name, "q").send_keys "Selenium WebDriver"15driver.find_element(:name, "btnK").click
execute_async_script
Using AI Code Generation
1 function() {2 var a = document.getElementById("lst-ib");3 a.value = "Hello from JavaScript";4 return a.value;5 }6result = driver.execute_async_script(js)
execute_async_script
Using AI Code Generation
1driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 500);")2driver.execute_script("document.getElementById('lst-ib').value='Selenium'")3driver.execute_script("document.getElementById('lst-ib').value='Selenium'")4driver.execute_script("document.getElementById('lst-ib').value
execute_async_script
Using AI Code Generation
1driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 5000);")2driver.find_element(:name, "q").send_keys "Selenium WebDriver"3driver.find_element(:name, "btnK").click4driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 5000);")5driver.find_element(:name, "q").send_keys "Selenium WebDriver"6driver.find_element(:name, "btnK").click7driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 5000);")8driver.find_element(:name, "q").send_keys "Selenium WebDriver"9driver.find_element(:name, "btnK").click10driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 5000);")11driver.find_element(:name, "q").send_keys "Selenium WebDriver"12driver.find_element(:name, "btnK").click13driver.execute_async_script("window.setTimeout(arguments[arguments.length - 1], 5000);")14driver.find_element(:name, "q").send_keys "Selenium WebDriver"15driver.find_element(:name, "btnK").click
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!