如何在SeleniumWebDriver中使用JavaScriptExecutor在js脚本加载时执行js函数
我试图在js脚本加载到HTML页面后执行js函数。但问题是js脚本在HTML页面上加载需要一些时间。如果我在java代码中添加几秒钟的睡眠,然后执行js函数,效果会很好 index.html如何在SeleniumWebDriver中使用JavaScriptExecutor在js脚本加载时执行js函数,javascript,java,selenium,selenium-webdriver,webdriver,Javascript,Java,Selenium,Selenium Webdriver,Webdriver,我试图在js脚本加载到HTML页面后执行js函数。但问题是js脚本在HTML页面上加载需要一些时间。如果我在java代码中添加几秒钟的睡眠,然后执行js函数,效果会很好 index.html <!DOCTYPE HTML> <html lang="en"> <head> </head> <body> </body> <script> var loadJS = function(url
<!DOCTYPE HTML>
<html lang="en">
<head>
</head>
<body>
</body>
<script>
var loadJS = function(url) {
var script = document.createElement("script");
script.src = url;
document.body.appendChild(script);
}
</script>
</html>
如果我添加Thread.sleep(5000),上面的代码可以工作代码>在上面的js.executeScript代码行之间,但不是在我删除它时。我如何更换新的
Thread.sleep(5000)编码>并且仍然可以工作您尝试过这个吗
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("console.log('Javascript console');");
您需要将WebDriver强制转换为JavascriptExecutor对象。除非执行此强制转换,否则ExecuteScript函数将不可用。然后您将可以访问.executeScript()函数
在执行javascript之前尝试使用此代码,这将迫使WebDriver等待页面完全加载:
WebDriverWait wait = new WebDriverWait(driver, 50);
wait.until((ExpectedCondition<Boolean>) wd -> ((JavascriptExecutor) wd).executeScript("return document.readyState").equals("complete"));
WebDriverWait wait=newwebdriverwait(驱动程序,50);
等待.until((ExpectedCondition)wd->((JavascriptExecutor)wd).executeScript(“return document.readyState”).equals(“complete”);
请阅读,是的,我已经这样做了,在我使用executeScript加载js后,我想执行一个js函数,但没有找到该函数,因为该脚本尚未加载到HTML页面上。是的,您是否尝试在标题中移动js?是的,我正在标题中加载js
Sample driver = new Sample (new SampleProfile());
driver.executeScript("console.log('Javascript console');");
WebDriverWait wait = new WebDriverWait(driver, 50);
wait.until((ExpectedCondition<Boolean>) wd -> ((JavascriptExecutor) wd).executeScript("return document.readyState").equals("complete"));