Java Selenium WebDriver 中executeAsyncScript和executeScript方法的使用
时间:2022-10-04
1、executeScript方法使用
同步方式在后台执行执行Js(JavaScript)代码。用它执行js代码会阻塞主线程执行,直到js代码执行完毕。
import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public >testJS{ public static void main(String[] args) { // TODO Auto-generated method stub //利用webdriver键入搜索关键字 WebDriver driver = new FirefoxDriver(); try{ driver.get("http://www.baidu.com"); JavascriptExecutor driver_js= ((JavascriptExecutor) driver); //利用js代码键入搜索关键字 driver_js.executeScript("document.getElementById(\"kw\").value=\"C#\""); //利用js代码取出关键字 String keyword = (String)driver_js.executeScript("var input = document.getElementById(\"kw\").value; return input"); System.out.println(keyword); driver.findElement(By.id("su")).click(); }catch (Exception e){ e.printStackTrace(); } driver.quit(); } }
2、executeAsyncScript方法使用
异步方法,它不会阻塞主线程执行。调用的函数executeAsyncScript将'done callback'作为最后一个参数,必须调用该函数来表示脚本已完成执行。这允许它与仅在使用回调时“完成”的代码一起使用 - 例如。setTimeout或异步XHR。如果未在超时限制内调用“完成回调”,则将拒绝返回的承诺。
1) 在浏览器中执行sleep
long start = System.currentTimeMillis();
((JavascriptExecutor) driver).executeAsyncScript(
"window.setTimeout(arguments[arguments.length - 1], 500);");
System.out.println(
"Elapsed time: " + (System.currentTimeMillis() - start));
2) 将测试与AJAX应用程序同步
WebElement composeButton = driver.findElement(By.id("compose-button"));
composeButton.click();
((JavascriptExecutor) driver).executeAsyncScript(
"var callback = arguments[arguments.length - 1];" +
"mailClient.getComposeWindowWidget().onload(callback);");
driver.switchTo().frame("composeWidget");
driver.findElement(By.id("to")).sendKeys("bog@example.com");
3) 注入XMLHttpRequest并等待结果
Object response = ((JavascriptExecutor) driver).executeAsyncScript(
"var callback = arguments[arguments.length - 1];" +
"var xhr = new XMLHttpRequest();" +
"xhr.open('GET', '/resource/data.json', true);" +
"xhr.onreadystatechange = function() {" +
" if (xhr.readyState == 4) {" +
" callback(xhr.responseText);" +
" }" +
"}" +
"xhr.send();");
JSONObject json = new JSONObject((String) response);
assertEquals("cheese", json.getString("food"));
相关文档:Java Selenium WebDriver操作调用浏览器后台执行Js(JavaScript)代码
特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。