zoukankan      html  css  js  c++  java
  • Selenium2(WebDriver)中执行JavaScript代码 (转)

    在用selenium编写web页面的自动化测试代码时,可能需要执行一些JavaScript代码,selenium本身就支持执行js,我们在代码中可以使用executeScript、executeAsyncScript这两个方法来执行JS。 
    executeScript是同步方法,用它执行js代码会阻塞主线程执行,直到JS代码执行完毕; 
    executeAsyncScript方法是异步方法,它不会阻塞主线程执行。

    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript(String script, object... args);
    
    executeScript方法如果有返回值,有以下几种情况:
       1、如果返回一个页面元素(document element), 这个方法就会返回一个WebElement
       2、如果返回浮点数字,这个方法就返回一个double类型的数字
       3、返回非浮点数字,方法返回Long类型数字
       4、返回boolean类型,方法返回Boolean类型
       5、如果返回一个数组,方法会返回一个List<Object>
       6、其他情况,返回一个字符串
       7、如果没有返回值,此方法就会返回null
    

    JavascriptExecutor js = (JavascriptExecutor) driver; 


    // 用js弹出alert

    js.executeScript("alert('Test Case Execution Is started Now..');");
    driver.switchTo().alert().accept();
    // 用js判断页面加载完毕,返回complete

    System.out.println("readyState: " + js.executeScript("return document.readyState").toString());
    // 用js得到页面的title

    String title = (String) js.executeScript("return document.title");
    System.out.println("current page title get by js: " + title);
    // 用js得到页面的domain name

    System.out.println("current page domain name get by js: " + js.executeScript("return document.domain"));
    // 用js操作页面元素,如高亮显示某个元素


    WebElement element = driver.findElement(By.id("kw"));
    js.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, "color: orange; border: 4px solid orange;");

    /** * 每隔一秒check一下页面加载是否完成,check次数是25 */
    public void checkPageIsReady()
    { JavascriptExecutor js = (JavascriptExecutor) driver;

    for (int i = 0; i < 25; i++) {
    if ("complete".equals(js
    .executeScript("return document.readyState").toString())) {
    break;
    } try {
    Thread.sleep(1000); }
    catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }

     

  • 相关阅读:
    WSDL格式
    eclipse修改文件编码
    eclipse代码格式化设置
    批量修改Java类文件中引入的package包路径
    Oracle 创建用户
    电脑端口介绍
    Python Web 性能和压力测试 multi-mechanize
    C++使用ocilib访问oracle数据库
    IPython使用学习笔记
    .NET Core与.NET Framework、Mono之间的关系
  • 原文地址:https://www.cnblogs.com/jack1989/p/7657501.html
Copyright © 2011-2022 走看看