Многие из них предположили, что я просто использую .onload
и запускаю обратный вызов после того, как скрипт готов. Это не работает для меня. Я пишу функцию, и он ожидает элемент сразу, а не позже. Вот что я получил:Как синхронно вводить скрипт?
webdriver.By.sizzle = function(selector) {
driver.executeScript("if(typeof Sizzle==='undefined'){var s=document.createElement('script');s.type='text/javascript';s.src='https://raw.github.com/jquery/sizzle/master/src/sizzle.js';document.head.appendChild(s);}");
return new webdriver.By.js("return Sizzle('"+selector.replace(/"/g,'\\"')+"')[0]");
};
Я хочу, чтобы придать Sizzle (если он еще не включен), а затем возвращают HtmlElement
. Он может занят - подождите, если нужно, но он должен вернуть HtmlElement.
Все answers here в основном просто сказал «не делай этого», но я не могу думать о другом.
Это селектор для веб-драйвера селена для JavaScript.
driver.executeScript
будет принимать аргументы. Интересно, могу ли я передать webdriver.promise
и вызвать его при загрузке скрипта ...? Я не знаю, как «наполнить» обещание.
Провести обратный вызов/вернуть обещание. –
Простой [поиск Google] (https://www.google.com/search?q=load+script+dynamically+javascript&rlz=1C1CHFX_enUS515US515&oq=load+script+dynamical&aqs=chrome.1.69i57j0l3.4831j0&sourceid=chrome&ie=UTF-8) показывает, как загрузить сценарий динамически: http://unixpapa.com/js/dyna.html.Неясно, что вы подразумеваете под «возвратом HTML-элемента». – jfriend00
@ jfriend00 динамически сгенерированные скрипты загружаются асинхронно, OP хочет сделать это синхронно, чтобы он мог вернуться из функции после вставки скрипта. –