Я использую selenium
(с python bindings и через protractor
главным образом) в течение достаточно долгое времени, и каждый раз, когда мне нужно было выполнить яваскрипт кода, я использовал execute_script()
метод. Например, for scrolling the page (питон):Понимание выполнения асинхронного скрипта в Selenium
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Или, infinite scrolling inside an another element (транспортир):
var div = element(by.css('div.table-scroll'));
var lastRow = element(by.css('table#myid tr:last-of-type'));
browser.executeScript("return arguments[0].offsetTop;", lastRow.getWebElement()).then(function (offset) {
browser.executeScript('arguments[0].scrollTop = arguments[1];', div.getWebElement(), offset).then(function() {
// assertions
});
});
Или, для получения dictionary of all element attributes (питон):
driver.execute_script('var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;', element)
Но API WebDriver также имеет execute_async_script()
, который я лично не использовал.
В каких случаях он распространяется? Когда следует использовать execute_async_script()
вместо обычного execute_script()
?
Вопрос является селен-специфическим, но язык-агностик.
Благодарим вас за ссылку на javaDoc - есть некоторые примеры. Вам лично нужно было выполнить скрипт async? Если да, не могли бы вы описать варианты использования? Это было бы очень полезно. – alecxe
Добавлены некоторые примеры. Надеюсь, это имеет смысл. – hankduan
Отлично, это было интересное путешествие в сценарии клиентской стороны транспортира и другие внутренние детали! Еще раз спасибо. Теоретически предположим: если бы я тестировал угловое приложение с привязками selenium python - мне нужно было бы загрузить похожие (или такие же) клиентские скрипты и вызывать функции testForAngular() 'и' waitForAngular() 'асинхронно, чтобы проверить и подождать, пока Угловой станет «стабильным». Верный? – alecxe