zoukankan      html  css  js  c++  java
  • 【java+selenium3】JavaScript的调用执行 (十)

    JavaScript的调用

      在web自动化操作页面的时候,有些特殊的情况selenium的api无法完成,需要通过执行一段js来实现的DOM操作;

    //执行方式
    JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
    jsExecutor.executeScript("js代码");

    例如:

    1.时间插件限制手动输入的情况下,sendkeys无法写入数据,需要执行js来移除readonly属性!

       详细参考博客:时间控件的处理

    2.有些页面元素需要拉动滚动条才能获取到(因为拉取滚动条才加载),而selenium和webdriver都没有提供操作滚动条的方法,只能借助js来完成!

    //执行方式
    JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
    String js = "document.body.scrollTop=200";
    jsExecutor.executeScript(js);//执行js

    兴趣扩展:实现滚动条匀速向下滚动代码

    package cn.test;
    
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    
    public class Test {
        public static void main(String[] args) {
            System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
            WebDriver driver =new ChromeDriver();
            try {
                driver.get("https://www.12306.cn/index/");
                driver.manage().window().maximize();
                Thread.sleep(5000);
                //执行方式
                JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
    //                String js = "document.documentElement.scrollTop=200"; 
                String js = null;
                for (int i = 0; i < driver.manage().window().getSize().height*2; i=i+3) {
                    if(driver instanceof ChromeDriver) {
                        js = "document.body.scrollTop="+i;
                    }else if(driver instanceof FirefoxDriver) {
                        js = "document.documentElement.scrollTop="+i;
                    }else if(driver instanceof InternetExplorerDriver) {
                        js = "document.documentElement.scrollTop="+i;
                    }
                    jsExecutor.executeScript(js);//执行js
                }
                Thread.sleep(5000);
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                System.out.println("执行结束,关闭浏览器!");
                driver.quit();
            }
        }
    }

    学习后总结,不足之处后续补充。。。

    未完待续、、、

  • 相关阅读:
    Android创建上下文(appContext)
    java泛型——同一类型
    (转)cglib介绍与原理——CallBackFilter、延迟加载
    cglib常用api
    ES6——Proxy实现Web服务,进行方法拦截,通过方法名称生成网址
    day4幸运抽奖系统更新
    day7_abstractClass_interface
    day6_inheritance_polymorphis
    day5_package
    day4_class_method_array
  • 原文地址:https://www.cnblogs.com/xiaozhaoboke/p/11134455.html
Copyright © 2011-2022 走看看