Java + Selenium实现执行执行javascript脚本,并获取返回值
文章目录前言一、Selenium是什么?二、使用步骤1.下载驱动2.加载依赖3.编写代码3.1需要在jvm运行时环境中,添加配置3.2 配置chrome3.3 执行脚本总结前言本文主要介绍通过Java调用Selenium执行js脚本,并获取js中的返回值,并且可以实现不弹出浏览器,后台静默执行。提示:以下是本篇文章正文内容一、Selenium是什么?selenium是一个用于Web应用程序测试的工
前言
本文主要介绍通过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提供两种执行脚本的方式:executeScript
和executeAsyncScript
,后一个表示异步执行,不阻塞当前进程,为了方便,本文使用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
更多推荐
所有评论(0)