Я использовал selenium
(привязки python и через protractor
) в течение довольно длительного времени, и каждый раз, когда мне нужно было выполнить javascript-код, я использовал метод execute_script()
. Например, для прокрутки страницы (python):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Или для бесконечной прокрутки внутри другого элемента (транспортир):
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
});
});
Или для получения словаря всех атрибутов элементов (python):
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()
?
Вопрос - селен-специфический, но язык-агностик.