前言

本文主要介绍通过Java调用Selenium执行js脚本,并获取js中的返回值,并且可以实现不弹出浏览器,后台静默执行。

提示:以下是本篇文章正文内容

一、Selenium是什么?

selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,可以使用包括括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等浏览器,和用户自己操作浏览器一样。 可以作为web自动化测试工具,也可以作为第三方中介来执行一些java中执行不了的js代码

ps: java从jdk1.6开始引入js引擎,从而支持执行js脚本,但是如果js脚本中包含一些浏览器内置对象,比如window对象,那么java在执行该脚本时会抛异常:uncaught JavaScript runtime exception: ReferenceError: “window” is not defined

二、使用步骤

1.下载驱动

我们以chrome为例,当前我电脑上chrome版本为87.0.428.141
在这里插入图片描述
到chrome官网上下载驱动
http://chromedriver.storage.googleapis.com/index.html

一定要对应住大版本,比如,我下载的是87.0.4280.88

然后把chromedriver.exe放到任意有可读权限的位置。

2.加载依赖

maven依赖如下:

<dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-chrome-driver</artifactId>
        <version>3.141.59</version>
</dependency>

3.编写代码

3.1需要在jvm运行时环境中,添加配置
System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");

后面的值就是上一步把chrome驱动放在的位置,相对或绝对地址都可以,但是一定要有可读权限。

3.2 配置chrome
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setHeadless(true);

声明一个ChromeOptions变量,并配置headless属性为true,表示不在前台打开chrome。

3.3 执行脚本

ChromeDriver提供两种执行脚本的方式:executeScriptexecuteAsyncScript,后一个表示异步执行,不阻塞当前进程,为了方便,本文使用executeScript方法

executor.executeScript(readJsFile())

readJsFile()方法为读取js脚本的内容

这时大家会有疑问,如何获取js脚本中的返回值呢?

我们需要在js脚本中return,如:
在这里插入图片描述

这里的entry()函数是我自定义的密码加密函数。

我们只需要把p return回来,java代码中就会获得这个值。

完整代码见下:

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

/**
 * @auther jixiang.ma
 * @date 2021/1/11
 **/
public class JsTest {
    public static void main(String[] args) throws Exception {
        System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setHeadless(true);
        WebDriver driver = new ChromeDriver(chromeOptions);
        JavascriptExecutor executor = (JavascriptExecutor) driver;
        System.out.println(executor.executeScript(readJsFile()));
        driver.quit();
    }

    private static String readJsFile() throws Exception {
        StringBuffer script = new StringBuffer();
        File file = new File("D:\\test.js");
        FileReader filereader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(filereader);
        String tempString = null;
        while ((tempString = bufferedReader.readLine()) != null) {
            script.append(tempString).append("\n");
        }
        bufferedReader.close();
        filereader.close();
        return script.toString();
    }
}

执行结果如下:
在这里插入图片描述

为了验证返回值是否正确,我们先把静默去掉,对比浏览器console和返回值的数据。

在js脚本中加入一行console.log(p);
java代码中将headless设置为false,driver.quit();注释掉

在这里插入图片描述
对比一下,发现返回值和js脚本中的计算结果是一致的。


总结

本文讲述了selenium如何安装,并用java代码去获取脚本返回值。

因为脚本内容还不完善,所以js脚本内容,暂时不发出来了,待完善后会在下篇博客中公布。
https://blog.csdn.net/majixiang1996/article/details/112651478

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐