【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();
        }
    }
}

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

未完待续、、、